What is the result of the "printf("%d", 0x11 | 010);" command?

5 phương ánCó giải thích

Các phương án trả lời

Chọn một phương án
Lời giảiChọn phương án để mở
Đáp án đúng: "25". Hằng 0x11 viết ở hệ mười sáu nên có giá trị 17 với dãy bit 10001; hằng 010 mở đầu bằng chữ số 0 nên C đọc là hệ tám, giá trị 8 với dãy bit 01000. Phép hoặc theo bit xét từng cặp bit và bật kết quả khi có ít nhất một bên bật, cho 11001, tức 25. Một tính chất giúp loại nhanh: phép hoặc chỉ bật thêm bit, không bao giờ tắt bit đang bật, nên kết quả không thể nhỏ hơn 17. Vì thế giá trị "5" bị loại ngay, nó còn nhỏ hơn cả toán hạng thứ nhất. Giá trị "22" có dãy bit 10110, vừa tắt mất bit thấp nhất mà 17 đang bật, vừa bật bit giá trị 4 mà không toán hạng nào bật. Giá trị "18" có dãy bit 10010, cũng tắt bit thấp nhất của 17 nên không thể là kết quả. Giá trị "28" có dãy bit 11100, mất bit thấp nhất và tự sinh bit giá trị 4, đó là kiểu sai do cộng dồn chứ không phải do lấy hoặc theo bit.

Cùng phần 2

Xuất hiện trong 1 bộ đề