#c #c #hex #endianness
#c #c #шестнадцатеричное представление #порядковый номер
Вопрос:
Рассмотрим следующий код :
unsigned char byte = 0x01;
В C/C
шестнадцатеричном формате будет рассматриваться как an int
и, следовательно, будет расширен до более чем одного байта. Поскольку существует более одного байта, если система использует малый или большой порядковый номер, это имеет эффект. Мой вопрос в том, к чему это будет расширено?
Если система int
содержит 4 байта, на какой из следующих он будет расширен :
0x00000001 ИЛИ 0x01000000
И влияет ли порядковый номер на то, к какому из них он будет расширен?
Комментарии:
1. В данном случае это не имеет значения.
byte
закончится0x01
любым способом.2. Вы, по сути, спрашиваете, что
int x = 0x01
приводит к значениюx
? Или каким будет базовое значение байтов в памяти для байтов, которые составляютx
?3. Мой вопрос касался байта, есть ли вероятность, что в какой-то системе он будет расширен и в итоге получит значение 0 вместо 1. Теперь, когда я понимаю, что этого не может быть, каким будет значение x в этом случае?
4.«Если в системе есть ‘int’, который содержит 4 байта». 32-разрядное представление
0x01
в памяти находится01 00 00 00
в системе с малым конечным порядком и00 00 00 01
в системе с большим конечным порядком. Ничего не потеряно. Если вы сохраняете в одном байте, это01
неважно.
Ответ №1:
Это полностью зависит от архитектуры. Компилятор выдает выходные данные в соответствии с порядковым номером вашего компьютера. Предполагая, что ваш микропроцессор имеет большой порядковый номер, компилятор выдаст;
char x = 0x01; --> 01,
int x = 0x01; --> 00 00 00 01
С другой стороны, если вы используете кросс-компилятор, ориентированный на младший порядковый номер, или вы компилируете код на младшем порядковом компьютере, он выдаст;
char x = 0x01; --> 01
int x = 0x01; --> 01 00 00 00
Вкратце, для выходных данных не существует стандартного или стандартного порядкового номера по умолчанию, выходные данные будут специфичны для архитектуры, на которую нацелен компилятор.
Ответ №2:
Порядковый номер не имеет значения. Порядковый номер относится только к тому, как значение хранится в памяти. Но значение, представленное тем, что хранится в памяти, будет равно 0x01, независимо от того, как оно хранится.
Возьмем, например, значение 0x01020304. Оно может храниться в памяти как либо 01 02 03 04
или 04 03 02 01
. Но в обоих случаях это все равно значение 0x01020304 (или 16 909 060).