30/09/2018, 16:37
Hỏi về bit fields trong Struct
Trong khi tìm cách viết hàm chuyển số thập phân sang IEEE thì em có đọc tham khảo về phần khai báo struct sử dụng bit fields. Nhưng khi mày mò một lát thì lại không hiểu lắm, cụ thể trong code thì kết quả in ra là -7 ( 1001 chuyển qua thập phân là -7 thì khá hợp lí ) và 121 ( cái này em đang rối ) . Các anh có thể giải thích hộ em được không ạ ! Cảm ơn mấy anh nhiều .
struct bitFields
{
int bit_0 : 1;
int bit_1_to_4 : 4;
int bit_5 : 1;
int bit_6_to_13 : 8;
};
int _tmain(int argc, _TCHAR* argv[])
{
bitFields a;
a.bit_1_to_4 = 1001;
a.bit_6_to_13 = 10011001;
printf("%d
",a.bit_1_to_4);
printf("%d
",a.bit_6_to_13);
return 0;
}
Bài liên quan
Trước hết struct này không chuẩn, nó thiếu bit. 1 + 4 + 1 + 8 = 14 bits tức là thiếu 2 bits để đủ 16 bits tức 2 bytes
Tiếp theo, khi em viết
a.bit_1_to_4 = 1001;
thì em nghĩ1001
là nhị phân, như C compiler nó nghĩ đây là số1001
trong hệ thập phân tức là tương đương với0b1111101001
.Em sửa lại bằng cách thêm tiền tố
0b
vào phía trước các số này. Lưu ý là tiền tố0b
không chuẩn. Có compiler hỗ trợ, có compiler không. Hoặc có thể thay1001
bằng số9
trong hệ thập phân.