#c #byte #endianness
#c #байт #порядковый номер
Вопрос:
unsigned char endian[2] = {1, 0};
short x;
x = *(short *) endian;
Я не понимаю значение, содержащееся в x. Если у меня система с малым порядком, x равно 1.
Но если у меня система с большим порядком, x равно 256.
Почему значение 256, а не 128?
Спасибо за вашу помощь.
Комментарии:
1. 1 находится в нулевом бите самого значимого октета 16-битного значения с большим порядком. Спросите себя, что такое 2 ^ 8?
Ответ №1:
Потому что байты 01 00
в формате big-endian — это значение 0x0100
, которое равно 1 << 8 == 2**8 == 256
(напомним, что в байте 8 бит).
Комментарии:
1. Другие ограничения для этого решения:
CHAR_BITS == 8
иsizeof(short) == 2