2012-06-25 59 views
3

可能重複:
What does 'unsigned temp:3' means是什麼意思 「:」 在結構Ç

struct Test 
    { 
     unsigned a : 5; 
     unsigned b : 2; 
     unsigned c : 1; 
     unsigned d : 5; 
    }; 

    Test B; 
    printf("%u %u %u %u", B.a, B.b, B.c, B.d); // output: 0 0 0 0 
    static struct Test A = { 1, 2, 3, 4}; 

有人能解釋我是什麼在結構:目的,printf只是輸出0所以我認爲這些不是默認值,但它們是什麼?

也可能有人能解釋我爲什麼A.a, A.b, A.c, A.d輸出1, 2, 1, 4,而不是1, 2, 3, 4

回答

8

這是一個bit field

它基本上告訴編譯器hey, this variable only needs to be x bits wide, so pack the rest of the fields in accordingly, OK

+0

@Downvoter,解釋一下嗎? –

1

這些位字段看到this Wikipeadia section on Bitfields或約bit fields

:後的數字表示該參考你有多少位要儲備爲左邊的標識符。這使得您可以通過緊密打包數據來分配比通常情況更少的空間。您只能在struct s或union s中執行此操作。

這是關於比特字段的簡短tutorial

+0

斷開的鏈接。請務必在下次鏈接到文章的正確部分。 –

+0

https://en.wikipedia.org/wiki/C_syntax#Bit_fields – WakiMiko

0

簡單說明:您可以指定變量應該有多少位。 (您不能指定比原始大小更多的位)
編輯:您的第三個變量只打印1,因爲它只有1 bit來存儲其數據。所以該值只能是01。十進制值3以二進制格式表示爲11。所以無論哪個位被截斷,你最終都會在變量中存儲一個1