Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.90/40: Рейтинг темы: голосов - 40, средняя оценка - 4.90
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915

Порядок байт

24.02.2020, 18:17. Показов 10999. Ответов 88
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,

Подскажите пожалуйста, вот есть:
C++
1
int m_int = 1073741824;  //в двоичном представлении: 01000000 00000000 00000000 00000000
Если к этому числу применить маску:
C++
1
2147483648 //  в двоичном представлении: 10000000 00000000 00000000 00000000
Если применить логическое сложение:
C++
1
2
3
4
5
6
7
cout << (m_int & 2147483648) << endl;
 
01000000 00000000 00000000 00000000
10000000 00000000 00000000 00000000
 
То естественно получим 0:
10000000 00000000 00000000 00000000
Если сделать сдвиг бита вЛево:
C++
1
2
3
4
5
6
7
8
cout << ((m_int<<1) & 2147483648) << endl;
 
    0<<1000000 00000000 00000000 000000000
           10000000 00000000 00000000 00000000
 
То получим: 2147483648
 
           10000000 00000000 00000000 00000000
То есть байта int`а слева направо.

Но, если сделать так:
C++
1
char * m_ptr_char = (char*)m_int;
И вывести 4 элемента int в качестве значения char:

C++
1
2
3
4
cout<<(int)m_ptr_char[0]<<endl;
cout<<(int)m_ptr_char[1]<<endl;
cout<<(int)m_ptr_char[2]<<endl;
cout<<(int)m_ptr_char[3]<<endl;
Выведется:
C++
1
2
3
4
0
0
0
64
То есть первый элемент будет 0 и только 4ый будет 64: b01000000

То есть компьютер просматривает байты в int справо налево, противоположно привычно-человеческому слева направо ? :
C++
1
00000000 00000000 00000000 01000000
Это связано вот с этими странными понятиями bigendian, littleendian ?

Если да, то подскажите пожалуйста:

1)Но если сделать сдвиг бита << влево, то бит сдвигается влево. То есть bigendian, littleendian - влияет только на байты, а не биты внутри байта ?

2) bigendian, littleendian - зависит от ОС или от процессора ? И есть функция, как определить какая из этих штук действует условно на моем компе ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.02.2020, 18:17
Ответы с готовыми решениями:

Порядок следования байт
Привет. Есть флаги: None = 0x000, DateTimeFormat = 0x001, ... Diagnoses = 0x010, ......

Порядок байт в union
#include &lt;iostream&gt; using namespace std; void disp_binary(unsigned u); union swap_bytes { short int num; char ch; ...

Порядок байт у числовой переменной
Здравствуйте. Можно ли как то указать у числовой переменной чтоб байты у нее должны быть little endian

88
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
28.02.2020, 17:27
Студворк — интернет-сервис помощи студентам
Есть пропозал в стандарт, который призван урегулировать этот вопрос с представлением объектов и получением доступа к байтам этих объектов. Как я понимаю этот пропозал уже принять EWG и остается только, чтобы его затвердила Core группа и возможно он попадет еще в С++17. Поэтому просто оставлю это здесь:
Миниатюры
Порядок байт  
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
28.02.2020, 17:32
Цитата Сообщение от Azazel-San Посмотреть сообщение
остается только чтобы его заствердила Core группа
А до тех пор можно забыть про сериализацию и взаимодействие с низкоуровневым API... (или использовать волшебный memcpy?)
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
28.02.2020, 17:38
Цитата Сообщение от zayats80888 Посмотреть сообщение
А до тех пор можно забыть про сериализацию и взаимодействие с низкоуровневым API...
Ну, об этом уже частично говорилось, то что мы обсуждали здесь представляет не более чем академический интерес и хотя он и академический, но не менее интересный (для меня)
На практике же все будет работать, даже, если в int будет число больше чем то, что может уместить char
Ну, возможно, за исключением некоторых случаев, но это не UB, если ты на своей платформе можешь это корректно обработать))))
1
28.02.2020, 17:39

Не по теме:

Цитата Сообщение от Azazel-San Посмотреть сообщение
Ну, об этом уже частично говорилось,
Это был сарказм :)

0
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
28.02.2020, 18:13
Цитата Сообщение от Kovacz Посмотреть сообщение
То все дело в обычном переполнении?
Нет. Я хотел сказать, что UB при переполнении и UB при чтении не влезающего в char значения следует из одного и того же вординга.
Цитата Сообщение от Kovacz Посмотреть сообщение
Соответственно если там будет unsigned char - UB не будет?
Будет.
0
0 / 1 / 0
Регистрация: 10.07.2017
Сообщений: 8
28.02.2020, 18:35
Цитата Сообщение от argcargv Посмотреть сообщение
следует из одного и того же вординга
Ну, так покажите этот вординг, я просил это еще парочку сообщений назад. И можно было избежать всех этих лишних обсуждений.
0
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
28.02.2020, 19:45
Цитата Сообщение от Kovacz Посмотреть сообщение
Ну, так покажите этот вординг, я просил это еще парочку сообщений назад
Т.е. вы в курсе, что переполнение это UB, но никогда не проверяли, где об этом написано? Лол. А вдруг вам врали.
В [expr]/4 (нумерация относительно стандарта C++17) написано.
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А какие еще нужны пруфы кроме использования этого факта людьми?
Argumentum ad antiquitatem идёт в жопу.
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
28.02.2020, 22:04
Цитата Сообщение от argcargv Посмотреть сообщение
Нет. Я хотел сказать, что UB при переполнении и UB при чтении не влезающего в char значения следует из одного и того же вординга.
Тут возможны два случая:
1) Вы не понимаете разницы между преобразованием типа T в тип U и T* в U*, но при этом читали стандарт и чего-то из него вынесли. Однако, более вероятно, что:
2) Вы тролль. Потому, что вы переигрываете - таких идиотов не бывает. Невозможно перейти к изучению того, что там написано в стандарте, не понимая базовых вещей. На пути будет много граблей.
0
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
10.03.2020, 11:27
Цитата Сообщение от avgoor Посмотреть сообщение
таких идиотов не бывает
У вас наверное мало опыта общения с идиотами. Они бывают совершенно феерические.
Мне недавно где-то (не помню, правда, где) попался один, у которого познания в C++ максимум на уровне "C++ за 21 день", но который с важным видом поучал меня, как нужно (или не нужно) читать стандарт.

Это, кстати, не один раз со мной происходило в разных местах. ИЧСХ, ни разу не было ни капли конкретики по поводу того, что же не так с моим чтением стандарта
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.03.2020, 11:27

Порядок байт в слове и бит в байте
читал эту требуются пояснения. A B C D - адреса в них число 128 BE A B C D ...

Определить порядок хранения байт 16-ричного числа
Всем привет! Имеется следующий вопрос: написать программу, которая показывает порядок хранения байт 16-ричного числа. Как это сделать?

Порядок байт. Массив чаров приводится к типу unsigned int.
Есть массив из 4 char. Массив приводится к типу unsigned int и затем данные извлекаются в переменную типа unsigned int. Нужно, чтобы байты...

Порядок байт в big-endian и little-endian
Всем привет! Народ подскажите мне пожалуйста простые прописные истины, а то я что то запутался! Предположим что у нас в байте 8 - бит и...

Закодировать файл. Взять 7 байт. Первый бит каждого байта переместить в 8 байт
Нужно открыть бинарный файл и закодировать следующим образом. Взять 7 байт. Первый бит каждого байта переместить в 8 байт. То есть,...


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

Или воспользуйтесь поиском по форуму:
89
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru