2014-09-02 88 views
-1

我最近遇到了这样的代码运营商:在C,它是什么?

struct tcpheader { 
unsigned char  tcph_reserved:4, tcph_offset:4; 
.... 

其最明显的是什么:样做,但为什么我从来没有见过这种正式? 我无法找到:运算符的正式定义。我搜索了 分区,拆分和变量声明的划分无济于事。

任何人都有关于:运营商的一些信息?

+0

我正在寻找一个重复的 – user3167049 2014-09-02 12:29:50

+0

但这也是从其他东西的重复。 – user3167049 2014-09-02 12:30:19

回答

6

这不是一个“操作符”,它是一种声明bit fields的方法。

它只在structunion声明中有效,基本上可以告诉编译器有多少位需要该字段使用。

因此,您的示例为每个字段指定了4位,可能希望将这两个字段打包到相同的8位字节中。

请注意,使用位字段时的位顺序和布局未指定,并且由编译器决定,因此非常不便。

1

这是:不是一个运营商。这是Bitfields。一些网络搜索会产生比你想要的更多的关于它们的信息。但基本上冒号后面的数字描述了该字段使用多少位。

在你的代码 -

struct tcpheader { 
unsigned char  tcph_reserved:4, tcph_offset:4; 

通常unsigned char有8位的。 tcph_reserved:4表示您将4位分配给tcph_reserved

位域仅在结构和联合

+0

我怎么知道它叫做Bitfields?我在寻找可变分割,分割,分割。 – user3167049 2014-09-02 13:51:25

+0

@ user3167049这个回答是基于你的问题!如果你在结构体''unsigned char tcph_reserved:4'中有这样的事情''一味地说你可以说它是位域! – Sathish 2014-09-02 13:58:53

0

是有效的我wiil不是早先的答案是很好解释说,:用于指示在struct声明位域成员的事实添加任何东西。

在另一方面,在Ç我们有三元运算符? :在这种工作方式,例如:

int condition = 3 > 4; 
    char result1 = 'x', result2 = 'A'; 
    char x = (condition)? result1 : result2; 
  • 三元运算符计算一个condition
  • 如果condition为真(非零值),则评估表达式result1
  • 如果conditionfalse(零值),则评估表达式result2

换句话说,它对于一个if()句子来说是一个短手,其优点是可以在表达式中使用。

正如你所看到的,性格:三元运算符?:的一部分,但它不是由它自己的操作,因为它会联合到字符?