2014-09-02 2 views
-1

Я недавно встречался код, как этотОператор: на C, что это такое?

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

Его очевидным, что : вид сделать, но почему не я не встречал это официально? Я не могу найти, где формальное определение оператора :. Я искал разбиение, разбиение и деление объявления переменных безрезультатно.

У кого-нибудь есть информация о операторе :?

+0

Я искал дубликат – user3167049

+0

Но это также дубликат от чего-то еще. – user3167049

ответ

6

Это не «оператор», это способ объявить что-то под названием bit fields.

Это допустимо только внутри объявлений struct и union, и в основном позволяет рассказать компилятору, сколько бит вы хотите использовать в поле.

Таким образом, ваш пример указывает четыре бита для каждого поля, вероятно, ожидая, что оба поля будут упакованы в один и тот же 8-разрядный байт.

Обратите внимание, что порядок и расположение битов при использовании битовых полей не указывается и до компилятора, что делает их очень неспортивными.

1

Это : не является оператором. Это Bitfields. Некоторые веб-поиски предоставят больше информации о них, чем вы когда-либо захотите. Но в основном число после двоеточия описывает количество бит, которое использует поле.

В вашем code-

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

Обычно unsigned char имеют 8-БИТ. tcph_reserved:4 означает, что вы выделяете 4 бита в tcph_reserved.

Битовые поля действительны только в структурах и Союзов

+0

Как я должен был знать, что это называется Bitfields ??, я искал переменную split, partition, divide. – user3167049

+0

@ user3167049 Этот ответ основан на вашем вопросе! Если у вас есть что-то вроде этого в структуре 'unsigned char tcph_reserved: 4;' слепо вы можете сказать, что это бит-поле! – Sathish

0

Я не WIIL ничего добавлять к ранее ответы, которые хорошо объяснить тот факт, что : используется для обозначения членов битового поля в struct деклараций.

С другой стороны, в С мы имеем тройной оператор? :, который работает таким образом, например:

int condition = 3 > 4; 
    char result1 = 'x', result2 = 'A'; 
    char x = (condition)? result1 : result2; 
  • Тройная оператор оценивает condition.
  • Если condition является true (отличное от нуля), то оценивается выражение result1.
  • Если condition является false (нулевое значение), то оценивается выражение result2.

Другими словами, это короткая рука для предложения if(), с тем преимуществом, которое может использоваться в выражениях.

Как вы можете видеть, характер : является частью тройного оператора?:, но это не является оператор по своему собственному, так как идет совместным с характером ?.

Смежные вопросы