30/09/2018, 16:02
Poll: Kiểm tra kiến thức C - 1.12
Các bạn thảo luận đáp án nhé, bài test lấy từ http://www.indiabix.com/online-test/c-programming-test/11
12.What will be the output of the program ?
#include<stdio.h>
int main()
{
int i=4, j=8;
printf("%d, %d, %d
", i|j&j|i, i|j&j|i, i^j);
return 0;
}
- A. 12, 12, 12
- B. 112, 1, 12
- C. 32, 1, 12
- D. -64, 1, 12
Bài liên quan
i = 4 = 0100
j = 8 = 1000
( i | j ) & ( j | i ) = 1100 & 1100 = 1100
i ^ j = 1100
1100 = 1.2^3 + 1.2^2 + 0.2^1 + 0.2^0 = 12
Bài này khó quá, chạy máy thì ra kết quả A =))
quá khủng khiếp, mặc dù mình nhìn bài giải nhưng vẫn chưa hiểu
Đau đầu nha, không biết sau này đi làm có bao giờ vấp phải cái này không
Có, lâu lâu cũng có. Nhưng không nhiều vì người ta hạn chế code như thế này, trừ phi bất khả kháng
Chọn A. 12, 12, 12
Số 4 hệ cơ số 10 đổi sang hệ cơ số 2:
2^2 = 4 tại vị trí này hệ cơ số 2 có giá trị bằng 1, các chỗ khác có giá trị bằng 0, do đó ta được dãy số hệ 2 là 0100 nhóm 4 bit.
Số 8 hệ cơ số 10 đổi sang hệ cơ số 2: 2^3 = 8 tương tự như trên là 1000
Các phép toán thao tác trên bit của một số nguyên:
1&1 = 1; 1&0 = 0; 0&1 = 0; 0&0 = 0
1|1 = 1; 1|0 = 1; 0|1 = 1; 0|0 = 0
1^1 = 0; 1^0 = 1; 0^1 = 1; 0^0 = 0
Thực hiện hai số hệ cơ số 2 theo từng cột tương ứng:
0400|1000&1000|0400 lần lượt từ trái qua phải
0400|1000 = 1100
1100&1000 = 1000
1000|0400 = 1100
0400^1000 = 1100
printf %d: in số hệ cơ số 10
1100 số hệ cơ số 2 = 12^3 + 12^2 + 02^1 + 02^0 = 8 + 4 + 0 + 0 = 12 số hệ cơ số 10
Cái này nếu bạn làm bên nhúng sẽ gặp rất nhiều. Nhưng tất nhiên là tường minh hơn
Ở đây, theo kiểu nhúng thì các bạn có thể hiểu thế này cũng vui và nhanh.
※ Giá trị i = 4 là ta muốn bật bit thứ 2 lên. (binary : 0100), Giá trị j = 8 là ta muốn bật bit thứ 3 lên. (binary:1000).
Do đó, nôm na chỗ i|j&j|i, thì diễn giải dễ hiểu là (theo thứ tự từ trái sang phải) ⇒ muốn bật cả 2 bit thứ 2 và thứ 3 lên (i|j). Rồi giữ lại bit 3 thôi, tắt bit 2 (i|j&j). Rồi lại bật lại bit 2 lên (i|j&j|i).
⇒ Tóm lại, là muốn bật cả 2 bit lên. mà bật cả 2 bit thì giá trị là : binary 1100 -> dec: 12.