Подпись и без знака, и как работает расширение битов в C - PullRequest
4 голосов
/ 25 апреля 2010
unsigned short s;
s = 0xffff;
int i = s;

Как работает расширение? Добавлены 2 байта большего порядка, но я запутался, расширились ли там 1 или 0. Вероятно, это зависит от платформы, поэтому давайте сосредоточимся на том, что делает Unix. Будут ли два больших байта порядка int заполнены 1 или 0 и почему?

По сути, знает ли компьютер, что s без знака, и правильно ли присваивает 0 битам старшего разряда типа int? Итак, i сейчас 0x0000ffff? Или, поскольку ints по умолчанию подписаны в Unix, он берет бит со знаком из s (a 1) и копирует его в байты более высокого порядка?

1 Ответ

10 голосов
/ 25 апреля 2010

Нет, значение unsigned никогда не расширяется знаком. Upcasting всегда будет дополнять такое значение нулями.

Точнее, переменная без знака представляет конкретное число, и она все равно будет представлять тот же номер после преобразования, если это возможно в новом формате.

Шестнадцатеричный или нет, C (хотя и не C99) и C ++ предназначены для работы в отсутствие битов, например, с цифрами base-10.

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