2012-01-09 48 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