Двоичное представление со знаком в C - PullRequest
0 голосов
/ 05 июля 2018

После прочтения этого двоичные константы могут быть записаны вместо двоичного кода в GCC следующим образом:

int foo = 0b1010;

И выжидательно распечатывает 10 с printf("%d", foo).

Однако, с прикрепленным ключевым словом signed (несмотря на то, что int подписано по умолчанию), это не влияет на интерпретацию GCC 0b1010 (должно быть -6). Почему это так, и возможно ли сделать двоичные константы подписанными?

1 Ответ

0 голосов
/ 05 июля 2018

Числовые константы имеют тип int по умолчанию. Константа 0b1010 также относится к этому типу.

Предполагая, что int - это 4 байта в вашей системе, это эквивалентно записи 0b00000000000000000000000000001010. Предполагая представление комплимента 2, бит знака не установлен, так что это не отрицательное число. Его значение - 10 в десятичном виде.

Если бы вместо этого вы указали 0b11111111111111111111111111111010 в качестве значения, это было бы -6.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...