2015-10-19 7 views
0

Написав код в виде:Биты и байты заполнения

int i = 0xFF; 

И зная, что на моей системе целого типа имеет 4 байта, есть стандартный способ предсказать, как эти недостающие биты будут заполнены в I переменная, которая будет всегда заполняться как:
0xFFFFFFFF
или
0xFF000000
то есть, в приведенном выше примере связана с тем фактом, который спрашивает, может ш e предсказать, будут ли остальные биты заполнены нулями или единицами?

Другой вопрос, есть ли способ узнать, если он будет заполнен на задней или передней панели, что является:
0xFF000000 // < < - биты, заполненные на задней или
0x000000FF // < < - биты, заполненные с фронта

ответ

2

int i = 0xFF; с 4-байтовых целых чисел заполняет 1 байт с FF, а другой 3 с 00.

char i = 0xFF; с другой стороны (с 1-байтового полукокса) заполняет 1 байт с FF, и вы не имеете гарантируем для что следующие 3 байта (ни их значения, ни если они используются для других переменных и т. д. или нет).

Направление байт

FF 00 00 00 
00 00 00 FF 

называется «порядок байтов» вашего процессора (и OS, компилятор и т.д. сделаны таким образом, чтобы они соответствовали его). «Обычные» компьютеры сегодня являются «малопоточными», то есть FF 00 00 00, хотя в устройствах, таких как мобильные телефоны, есть и другие устройства.
Однако вы не заметите энтиансу прямо в своей программе: если вы сравните int с эти значения будут равны 00 00 00 FF, которые математически корректны (или говорят в другом направлении: когда вы пишете 000000FF в исходном файле, компилятор меняет его, на самом деле вы сравниваете значение int с FF 00 00 00).Чтобы получить «реальное» представление, необходимо набросить на указатель байта/char и получить доступ к 4 байтам в отдельности.

+1

По соглашению '0xFF000000' относится к одному 32-битовому значению с максимальным набором из 8 бит. Это явно отличается от написания 'FF 00 00 00', который представляет 4 байта, первый из которых установлен в 255. Хотя он достаточно ясен для тех, кто уже знаком с соглашением, говоря, что 0xFF000000 является представлением малознакового числа из 32 бит число, равное 255, просто неверно. ;) – enhzflep

0
int i = 0xFF; 

эквивалентно

int i = 255; 

Что в битах эквивалентно

0x000000FF 
2

Остальные биты будут 0, всегда. При сохранении в памяти это будет отображаться как FF 00 00 00 или 00 00 00 FF - это зависит от конечности устройства.

Первый прямой порядок байтов, - FF 00 00 00 и обычно используется на машинах Intel, хотя, как отметил в комментарии по Тоби Спейт, архитектура IA-64 может быть настроен на использование либо раскладку ,

Второй пример - big-endian. - 00 00 00 FF

+0

Как мало ориентировано на компанию Intel? Каждый процессор x86/64 использует мало endian, не имеет значения, если Intel или AMD или ... – deviantfan

+0

Intel упоминается как один пример компании, которая использует маленькую теоретическую концепцию. Благодарим за расширение списка примеров для включения AMD. – enhzflep

+1

Не все машины Intel являются малорисковыми. Процессоры IA-64 имеют бинарный интерфейс (то есть, по желанию, могут быть заданы либо значения по умолчанию). И 8051 процессоры являются шипами на шине команд. –

Смежные вопросы