2012-01-09 80 views

回答

6

您正在查看bitfields。這些定義必須位於一個結構中,並且它們表示iph_ihl是一個5位字段,而iph_ver是一個4位字段。

你的例子有點奇怪,因爲unsigned char在大多數機器上是8位類型,但是在那裏聲明瞭9位值的字段。

一般而言,位域非常不便攜,所以我會建議不要使用它們,但是您可以閱讀更多關於它們的信息here

+0

這隻能用字符來完成嗎? – 2012-01-09 04:23:39

+0

您可以使用任何整數類型。 – 2012-01-09 04:24:59

+0

@Hudson:你可以使用'signed int','unsigned int','int'(這取決於實現,可以被視爲有符號或無符號)或'bool' /'_Bool'。對任何其他類型的支持都是實現定義的擴展。 – 2012-01-09 04:53:02

1

這是位fields..See this關於C良好的文檔位fields..It在內存受限的情況下(例如嵌入式編程)正常使用,緊緊地收拾我們的使用..

重要的一點位域沒有地址 - 你不能指向他們或他們的陣列

0

除了上面提到的答案,你可以看看this一個很好的介紹位字段。有一件事要注意:c的位域只能用於integer類型。使用位字段不僅會使您的程序成爲non-portable,它還將成爲compiler-dependent