2015-03-20 2 views

ответ

9

Делая int a:1, вы настраиваете a как 1 bit signed int. Он представлен 1 бит и предполагает представление двух дополнений в вашей реализации, он имеет диапазон {0,-1}. Поэтому установка 1 на a будет представлять значение -1.

Добавление:

обратить внимание, что на C90 стандарт, простой int является signed int; но когда дело доходит до бит-полей, выполняется следующее:

Битовое поле может иметь тип int, unsigned int или подписанный int. Являются ли позиция бита высокого порядка простого int битового поля рассматриваются как знаковый бит является реализация определенного

+1

Разве это не реализация, независимо от того, подписано это поле или нет? –

+1

@ Анонимный, да. Вот почему лучше быть явным - используйте 'signed int' или' unsigned int', чтобы сделать платформу кода незаметной. –

+0

Спасибо всем за ответ ... @ArjunSreedharan Sreedharan .. почему он дает -1 по нечетным значениям и 0 по четным значениям. –

1

Вашего битовым поле представляет собой целое число со знаком размера 1. Допустимы только подписанных значениями одного бита равны 0 (0) и -1 (1), так как наиболее значимым (и единственным) битом считается бит знака.

Вы можете увидеть это более ясно, если учесть два-битовые значения: 0 (00), 1 (01), -1 (11) -2 (10).

Если вы перейдете на unsigned int a:1, вы встретите свое ожидание.

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