fount tuyên bố này A-width zero trường bit có thể gây ra trường bên cạnh được xếp trên ranh giới chứa tới nơi container là kích thước tương tự như các loại cơ bản của lĩnh vực chútCác loại khác nhau cho các trường bit có độ dài bằng không trong c?
Để đưa nó vào thực tế giả sử int là 2 byte (16 bit) và ngắn là 1 byte (8 bit) để lưu gõ. Ngoài ra chúng ta hãy nói rằng chúng tôi đang sử dụng trình biên dịch gcc (sẽ được tốt đẹp để giải thích sự khác biệt để kêu vang).
struct foo {
unsigned int a:5;
unsigned int :0;
unsigned int b:3;
}
Trong bộ nhớ này trông giống như
struct address
|
|
v
aaaaa000 00000000 bbb00000 00000000
Câu hỏi 1: Trong sự hiểu biết của tôi nó có thể không nhìn như aaaaa000 00000000 0..00bbb00000...
, Vì vậy bbb
phải phù hợp với container trực tiếp sau chứa hiện tại. Điều này có đúng không?
Di chuyển trên, nếu tôi chỉ định
struct bar {
unsigned short x:5;
unsigned int :0;
unsigned short y:7;
}
nó sẽ như thế nào vậy?
struct address
| short stops here short starts
| | |
v v | this is uint | v
xxxxx000 00000000 00000000 yyyyyyy0
Sửa 1 Nó được chỉ ra rằng ngắn không thể ít hơn 16 byte. Đó là hơi bên cạnh điểm trong câu hỏi này. Nhưng nếu quan trọng của nó đối với bạn, bạn có thể thay thế short
với char
và int
với short
Trình biên dịch nào? Bitfield có rất nhiều chi tiết cụ thể về triển khai. –
@CarlNorum đã chỉnh sửa câu hỏi. – user10607
Ngay cả bitfields có được đệm cho căn chỉnh trong quá trình chuyển đổi loại, vì vậy mẫu của bạn không đúng. –