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\n", 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
2 Likes

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

4 Likes

Bài này khó quá, chạy máy thì ra kết quả A =))

2 Likes

quá khủng khiếp, mặc dù mình nhìn bài giải nhưng vẫn chưa hiểu :smile:

2 Likes

Đ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

2 Likes

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 :smile:

2 Likes

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

4 Likes

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 :slight_smile:
Ở đâ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.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?