Как каждый байт в целом числе сохранен в ЦП / память?

Если бы Вы на самом деле ищете Построение диаграммы библиотек, а не для библиотек Node/Edge Graph я предложил бы разориться на библиотеку Big Faceless Graph ( BFG). Это - путь, легче использовать, чем JFreeChart, более хорошие взгляды, выполнения быстрее, больше произвел опции, действительно никакое сравнение.

7
задан Gregory Pakosz 8 December 2009 в 07:32
поделиться

6 ответов

Потому что процессор, на котором вы работаете, little-endian . Меняется порядок байтов для многобайтового основного типа. На машине с прямым порядком байтов все будет так, как вы ожидаете.

33
ответ дан 6 December 2019 в 04:45
поделиться

Это потому, что вы запускаете программу на little endian процессоре. См. Также порядок байтов здесь и там .

12
ответ дан 6 December 2019 в 04:45
поделиться

Порядок байтов, очевидно, является ответом, как указал Гоз.

Но для тех, кто не понимает, что это означает, также важно понимать, что порядок байтов, отображаемых в пример такой же, как порядок в исходном int. Memcpy не меняет порядок байтов независимо от типа платформы.

9
ответ дан 6 December 2019 в 04:45
поделиться

Поскольку порядок байтов является произвольным проектным решением. Попав в регистр, нет порядка байтов 1 .

Порядок байтов возникает, когда мы обращаемся к меньшим единицам, например байтам. Это, по сути, произвольное решение, которое должен принять разработчик ЦП: прямой или прямой порядок байтов.

Полезно упростить ситуацию и понять, что в основном это соединение с периферийными устройствами, которое упорядочивается по байтам. Да, это можно обнаружить с помощью байтовой адресации, как вы доказали, но в целом скалярные значения загружаются и сохраняются как единицы в регистры, и в этом случае порядок байтов ничего не меняет. Старшие биты находятся «слева», по крайней мере, как мы обычно пишем числа. Вот почему << и >> операторы всегда дают одни и те же результаты на машинах с прямым порядком байтов и обратным порядком байтов при использовании в соответствии со стандартами языка.

Но для чтения и записи потоков данных на периферийные устройства вы вынуждены выбирать байты приказ. Это связано с тем, что периферийные устройства в основном являются устройствами с потоком байтов. Имеет ли самый младший адрес старшие или самые младшие биты? Это делается в обоих направлениях, и лагеря раньше были довольно равномерно разделены.

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

Представьте себе ЦП, у которого нет байтов, только 32-битные слова с адресами 0, 1, 2. Компилятор C создает для всех 32-битных объектов char, int и long. (Это разрешено Сх9.) Вау, нет проблем с порядком байтов! И то, и другое! Но ... что происходит, когда мы подключаем наше первое периферийное устройство ??


1. Ну, у x86 есть регистры, которые являются псевдонимами меньших регистров, но это уже другая история.

6
ответ дан 6 December 2019 в 04:45
поделиться

На разных машинах может быть разный порядок байтов, но взгляните на этот код и подумайте, что происходит в зависимости от того, как расположены байты:

long x = 89;
short *p = (short*)&x;
short y = *p;
2
ответ дан 6 December 2019 в 04:45
поделиться

Если вы хотите, чтобы ваше приложение было переносимым или разрабатывалось в рамках команды, вы, вероятно, не захотите следовать этой логике, поскольку это затруднит выявление ошибок и продлит разработку.

1
ответ дан 6 December 2019 в 04:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: