2012-01-09 5 views
4

Можно создать дубликат:
What does 'unsigned temp:3' meansВ C что делает:: do?

Я пытался узнать сырец программирования сокетов в C и пришел через это:

unsigned char  iph_ihl:5, iph_ver:4; 

Я смущен о том, что ':' делает. Это даже делает? Или это просто часть имени переменной?

ответ

6

Вы смотрите на битовые поля. Эти определения должны быть внутри структуры, и они означают, что iph_ihl является 5-битовым полем, а iph_ver является 4-разрядным полем.

Ваш пример немного странный, так как unsigned char был бы 8-разрядным типом на большинстве машин, но там было объявлено 9 бит.

В целом битполы довольно не переносятся, поэтому я бы рекомендовал их использовать, но вы можете узнать о них более подробно here.

+0

Можно ли это сделать только с помощью символов? –

+0

Вы можете использовать любой целочисленный тип. –

+0

@ Hudson: вы можете использовать 'подписанный int',' unsigned int', 'int' (который, в зависимости от реализации, может рассматриваться как подписанный или без знака) или' bool'/'_Bool'. Поддержка любых других типов - это расширение, определяемое реализацией. –

1

Это немного fields..See this хорошая документация о С укусил fields..It обычно используется в памяти ограниченных ситуациях (например, встроенных программ), чтобы плотно упаковать наше использование ..

Важные точки Битовые поля не имеют адреса - у вас нет указателей на них или их массивов

0

Помимо вышеупомянутых ответов, вы можете ознакомиться с this, чтобы получить хорошее представление о битовых полях. Одно замечание: битовые поля в c могут использоваться только для моделей integer. Использование битовых полей не только сделает вашу программу non-portable, она также будет compiler-dependent.