Форум программистов, компьютерный форум CyberForum.ru

Порядок байт в big-endian и little-endian - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 60, средняя оценка - 4.72
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
13.06.2013, 11:29     Порядок байт в big-endian и little-endian #1
Всем привет! Народ подскажите мне пожалуйста простые прописные истины, а то я что то запутался!
Предположим что у нас в байте 8 - бит и где число 5 будет иметь вид 101.
Как будет выглядеть число 5 в 2-х байтах памяти в big-endian и little-endian.

0000 0000 0000 0101 - big-endian ?
0000 0101 0000 0000 - little-endian ?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14209 / 6224 / 987
Регистрация: 02.05.2013
Сообщений: 10,368
Завершенные тесты: 1
14.06.2013, 22:41     Порядок байт в big-endian и little-endian #21
Цитата Сообщение от stawerfar Посмотреть сообщение
Про какой барьер компилятора вы говорите? И как его применять?
Компилятор может в процессе оптимизации сгенерировать такой машинный код, что
он будет лишь очень отдаленно напоминать оригинал: переменные могут быть перемешаны,
помещены в регистры, и т.д. Кое-что вообще будет выкинуто за борт.
В данном примере
Цитата Сообщение от stawerfar Посмотреть сообщение
C++
1
2
int sizebyte = sizeof(val);
int sizebit = sizebyte * 8;
вы не можете быть наверняка уверенным, что переменная sizebyte располагается в
памяти до sizebit, ровно как и наоборот. Точно также нельзя быть уверенным в том,
что присваивание sizebyte выполняется до присваивания sizebit. Например, попробуйте
сделать sizebyte и sizebit глобальными - вполне возможно, что вывод программы будет
другим. Так что этот код некорректен. Для контроля над подобными вещами существуют
барьеры компилятора, в Visual C++, например, это _ReadWriteBarrier и volatile.
Хотя они предназначены в основном для многопоточного кода, а не для таких примеров.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
14.06.2013, 22:43  [ТС]     Порядок байт в big-endian и little-endian #22
А смысл был определить нумерацию адресов на данной машине. То есть сначала или с конца идет нумерация адресов в памяти.
grizlik78
Эксперт С++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,960
14.06.2013, 22:44     Порядок байт в big-endian и little-endian #23
Цитата Сообщение от stawerfar Посмотреть сообщение
Да я согласен нужно было использовать например
char buff[2];
if (&buff[0] < &buff[1])
А это выражение всегда истинно. Тогда как предыдущее непредсказуемо.
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
14.06.2013, 22:48  [ТС]     Порядок байт в big-endian и little-endian #24
Цитата Сообщение от grizlik78 Посмотреть сообщение
А это выражение всегда истинно. Тогда как предыдущее непредсказуемо.
? Можно поподробнее?
grizlik78
Эксперт С++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,960
14.06.2013, 22:49     Порядок байт в big-endian и little-endian #25
Цитата Сообщение от stawerfar Посмотреть сообщение
То есть сначала или с конца идет нумерация адресов в памяти.
Нумерация всегда идёт с начала, с какой бы стороны это начало не находилось

Добавлено через 1 минуту
Цитата Сообщение от stawerfar Посмотреть сообщение
? Можно поподробнее?
А что подробнее? Элемент массива с индексом 1 всегда имеет адрес больше, чем элемент с индексом 0. Всё.
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
14.06.2013, 22:49  [ТС]     Порядок байт в big-endian и little-endian #26
А как тогда проверить машинное представление нумерации адресного пространства?
grizlik78
Эксперт С++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,960
14.06.2013, 22:51     Порядок байт в big-endian и little-endian #27
А какой от этого толк?
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
14.06.2013, 22:54  [ТС]     Порядок байт в big-endian и little-endian #28
Это другой вопрос уже?

Добавлено через 2 минуты
Дело не в толке а в самой сути, я думаю что понимание этого и "ощупывание" расширит мой кругозор в computer science.
grizlik78
Эксперт С++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,960
14.06.2013, 23:04     Порядок байт в big-endian и little-endian #29
Ну мне просто не очень понятно значение фразы "машинное представление нумерации адресного пространства".
Ну вот, допустим, есть физические адреса, которые выставляются на шине адреса, есть виртуальные адреса, с которыми работает наша программа на C/C++. Что из того, что между этими адресами может не быть ничего общего? Для программы достаточно, что адреса могут принимать только определённые значения и в массивах эти адреса возрастают от элемента к элементу. Что ещё можно узнать изнутри? По-моему ничего. Может я ошибаюсь...
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
14.06.2013, 23:08  [ТС]     Порядок байт в big-endian и little-endian #30
Я понял нужно мне наверное переходить на изучение какого нибудь ассемблера и книжку про компиляторы почитать.
Что бы такие тонкости хорошо понимать. Всем спасибо.
grizlik78
Эксперт С++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,960
14.06.2013, 23:11     Порядок байт в big-endian и little-endian #31
Цитата Сообщение от stawerfar Посмотреть сообщение
Я понял нужно мне наверное переходить на изучение какого нибудь ассемблера и книжку про компиляторы почитать.
Кстати, компиляторы обычно имеют ключи, позволяющие сохранить результат трансляции в виде программы на ассемблере. Visual C и GCC точно умеют (да вроде все что видел умели).
Иногда полезно посмотреть, что же "нагенерировал" компилятор. Ну и как практика при изучении ассемблера
Nighthome
Сообщений: n/a
03.09.2013, 19:16     Порядок байт в big-endian и little-endian #32
как порядок байт влияет на результат побитовых операцый?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2013, 20:19     Порядок байт в big-endian и little-endian
Еще ссылки по теме:

C++ Из UCS-2 Little Endian в UTF-8 без BOM
C++ Big-endian тестирование
C++ Перегрузка ifstream и ofstream для работы с файлами в little-endian формате?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
zer0mail
2187 / 1870 / 187
Регистрация: 03.07.2012
Сообщений: 6,656
Записей в блоге: 1
03.09.2013, 20:19     Порядок байт в big-endian и little-endian #33
Имхо, можно так:
C++
1
2
3
4
5
6
    int i=1;
    char *pc=(char*)&i;
    if (pc[0]>pc[1]) 
        cout<<"little-endian";
    else
        cout<<"big-endian";
Yandex
Объявления
03.09.2013, 20:19     Порядок байт в big-endian и little-endian
Ответ Создать тему
Опции темы

Текущее время: 03:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru