2014-09-02 69 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()句子來說是一個短手,其優點是可以在表達式中使用。

正如你所看到的,性格:三元運算符?:的一部分,但它不是由它自己的操作,因爲它會聯合到字符?