What will the following code output?
4 phương ánCó giải thích
#include <stdio.h>
int main() {
int a = 7;
printf("%d", (a << 2) | 1);
return 0;
}Các phương án trả lời
Chọn một phương ánLời giảiChọn phương án để mở
Đáp án đúng: "29". Biến a bằng 7 có dạng bit là 111. Phép dịch trái hai nhịp đẩy cả ba bit đó sang trái và lấp hai bit 0 vào cuối, thành 11100, tức là 28; đây cũng là lý do dịch trái n nhịp tương đương nhân với 2 lũy thừa n. Tiếp đó phép hoặc trên bit với 1 chỉ chạm vào bit thấp nhất, bit này đang là 0 nên nó được bật lên, cho 11101 là 29. Ý "28" sai vì nó dừng ở kết quả dịch trái, bỏ quên phép hoặc bit đứng sau. Ý "15" sai vì nó ứng với việc chỉ dịch trái một nhịp, ra 14 rồi bật bit thấp nhất thành 15. Ý "30" sai vì muốn ra 30 thì phải bật bit thứ hai tính từ phải, nghĩa là hoặc với 2, còn mặt nạ trong mã là 1; cũng cần nhớ đây là phép hoặc bit chứ không phải phép cộng, nên 28 không tự cộng thêm 2.
Cùng phần 2
Xuất hiện trong 2 bộ đề
Đi tiếp từ đây