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) и копирует его в байты более высокого порядка?