簡體   English   中英

C ++-定義1位布爾

[英]C++ - Defining 1 Bit Bools

定義結構的后果如下:

typedef struct {
    bool          Bit0 : 1;    //Bit 0
    bool          Bit1 : 1;
    bool          Bit2 : 1;
    bool          Bit3 : 1;
    bool          Bit4 : 1;
    bool          Bit5 : 1;
    bool          Bit6 : 1;
    bool          Bit7 : 1;     //Bit 7
    char          SomeOtherData;
}Char16Bits;

...

Char16Bits MyStructure;

MyStructure.Bit0 = true;
MyStructure.Bit1 = false;

在我的測試程序中,一切似乎都很好,每個“ Bit0-7”僅占用1位,並且我可以看到它們在內存中按預期方式工作。 當查看VS2010內存窗口時,“ SomeOtherData”字符似乎是內存中結構的第二個字節,這一切都很好。

但是,我可以可靠地假設這些位中的每一個始終僅占1位嗎? 如果我將2個字節存入此結構,第二個字節是否總是可靠地占據結構中的“ SomeOtherData” char元素?

結構打包始終取決於編譯器,但是大多數編譯器應將此打包成兩個字節。

您可以依賴sizeof(MyStructure)作為數據結構的總大小(考慮到此處討論的填充), 為什么結構的sizeof不等於每個成員的sizeof的總和? )和offsetof(Char16Bits,SomeOtherData)SomeOtherData的正確偏移量。

如果您需要編寫假定特定大小或偏移量的代碼,請使用assert()static_assert()以使該代碼不允許在不符合您的假設的平台上運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM