Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/47: Рейтинг темы: голосов - 47, средняя оценка - 4.83
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484

Запись констант в шестнадцатеричной системе

23.08.2019, 14:16. Показов 10878. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сейчас изучаю библиотеки связанные с блютуз и вот такая интересная штука
почти везде используется 16-теричная система для записи в переменную ,зачем и почему?
вот примеры
C
1
2
3
4
5
uint8_t lap[3] = { 0x33, 0x8b, 0x9e };
-----------------------------------------------------
        ir->lap[0] = 0x33;
        ir->lap[1] = 0x8b;
        ir->lap[2] = 0x9e;
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.08.2019, 14:16
Ответы с готовыми решениями:

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

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

Cout вывод числа в двоичной и шестнадцатеричной системе счисления
Помогите пожалуйста. Как сделать чтобы выводило не... 1 = 100000000000000000000000000000001, а 1. 2 =...

39
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
23.08.2019, 18:40
Студворк — интернет-сервис помощи студентам
ReYalp,
Ну если вам удобно записывать в десятичной системе счисления, то можно и так, ограничений же нет.
У вас возник конкретный вопрос на который был дан ответ. А действовать согласно данным ответам или нет - решать конечно же вам.

К тому же в вашем случае 0-9 не подойдёт, там числа двузначные
1
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
23.08.2019, 18:43
ReYalp, Допустим, к LPT-порту присоединена планка из 8 светодиодов, а через переменную uint8_t lpt1 можно читать и писать значения порта (от 0 (всё диоды выключены) до 255 (все диоды светятся)). Допустим, что начальное значение на порту = 51 (4 диода горят, 4 - не горят)
Напиши кусок программы, который:
а) гасит диод д1,
б) зажигает диоды д2 и д3,
ц) состояния диодов д4 и д5 изменяет на противоположное.
Номера диодов: 0 ≤ дi ≤ 7.
------
Сделаешь - поймёшь глубинный смысл.
1
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
23.08.2019, 18:49  [ТС]
Verevkin, та писал я в универе на ассемблере ,я понимаю "глубинный смысл" ,просто в даном случае НЕ БЫЛО понятно зачем такой подход,ведь здесь нету ни диод и ничего другого,теперь я понял,спасибо

Добавлено через 1 минуту
Verevkin, и даже в С++(или С) имел дело с битами,это все понятно
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
23.08.2019, 18:51
Цитата Сообщение от ReYalp Посмотреть сообщение
,просто в даном случае НЕ БЫЛО понятно зачем такой подход,ведь здесь нету ни диод и ничего другого,
Тебе описали в общем случае. Что, как и почему в том коде (сверху) - спрашивай у автора этого кода. Телепатов тут нет.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
23.08.2019, 18:53  [ТС]
Verevkin, ну я уже понял что к чему и для чего такой подход,спасибо
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
24.08.2019, 18:32
ReYalp, четыре бита это 16 (24) и следовательно байт кодируется парой 16-ричных чисел. Для 32 (слово в нашем обыденном понимании) - две праы. Их часто пишут через двоеточие типа A4:FC. Это стандартный подход кодировать байты парой 16-ричных разрядов. Четыре бита и еще четыре бита. Это придумано финикийскими пиратами. Минимальная штурмовая лодка имела по четыре весла с каждой стороны. Трудность была в том, что ещё не было латинского алфавита. То есть пришлось заставить римлян его создать. А цифры потибрили у арабов. Удобно даже для конспирации.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.08.2019, 22:36
Цитата Сообщение от ReYalp Посмотреть сообщение
почти везде используется 16-теричная система для записи в переменную ,зачем и почему?
что бы подчеркнуть идею:
интерес представляет значение бит в числе, а не само число.

когда ты видишь запись вида:
C++
1
uint8_t lap[3] = { 0x33, 0x8b, 0x9e };
ты сразу акцентируешь своё внимание: а не флаги ли у нас тут?

если бы там обычные десятичные циферки стояли бы,
тогда этот массив 8 битных чисел так бы и воспринимался:
как просто массив 8ми битных чисел.

почему сразу не двоичная система?
потому что запись была бы длиннее.
и в кучке нуликов и единичек легко ошибиться.

Цитата Сообщение от Verevkin Посмотреть сообщение
16-ричная удобнее.
удобнее, чем что?

Цитата Сообщение от TRam_ Посмотреть сообщение
тогда уже флаги типа
(1<<10) + (1<<5) + (1<<4) + (1<<2) + (1<<0)
нормальные люди примерно так и делают.
в смысле: используют более простую запись вида: 1 << N

операция сложения флагов - это конечно какой то бред.
использовать магические числа - тоже дикость.

цивилизованные люди используют цивилизованные константы:

C++
1
2
3
4
5
6
enum eFLAGS
{
    eFIRST   = 1 << 1,
    eSECOND  = 1 << 2,
    eTHIRD   = 1 << 3,
};
такой способ имеет как минимум два серьёзных преимущества.

1.
сами по себе запись очень легкая при написании:
не нужно думать над фактическим значением флага.

если бы в примере выше использовалась 16-тиричная система,
и нужно было бы добавить ещё один флаг,
пришлось бы думать/высчитывать:
чему равно 1 << 4 в 16-тиричной системе?

а нафига утруждать свой мозг какими то расчетами,
когда можно сразу же тупо так и записать:

C++
1
2
3
4
5
6
7
enum eFLAGS
{
    eFIRST   = 1 << 1,
    eSECOND  = 1 << 2,
    eTHIRD   = 1 << 3,
    eFOURTH  = 1 << 4,
};
при добавлении очередного флага,
знай себе: увеличивай на единичку: 1<<4
и пофиг каким будет итоговое значение константы.

2.
лайф-хак.

вот есть интовая переменная, которая содержит какие то флаги.
и вот втыкаешь ты в отладчике, и что ты видишь?
какую то непонятную циферку.
и тебе совершенно не очевидно: так какие флаги то включены?

а вот если бы ты использовал цивилизованный способ,
как я обрисовал выше, тогда любой цивилизованный отладчик,
показал бы тебе флаги красиво:



фокус в том, что обычный int для отладчика - просто какое то число.
компилятор не телепат.
он понятия не имеет: флаги там, или что.

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

так почему же многие люди используют обычные 16тиричные инты,
вместо простых и красивых enum 1<< N ?

а хз.
может просто не раздуплили, что запись вида: 1<< N - проще.
а про лайф-хак с enum просто не знают.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.08.2019, 22:45
Цитата Сообщение от Verevkin Посмотреть сообщение
Напиши кусок программы, который:
уж точно не буду в уме вдуплять,
как выглядит голимая 16тиричная фигня в двоичном виде.

когда люди видят маску,
им важно её говорящее имя,
а не значение.

для любителей зажигать лампочки перекладывать биты,
есть православный bitset
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
24.08.2019, 23:26
Цитата Сообщение от hoggy Посмотреть сообщение
удобнее, чем что?
Чем армяне (© анекдот).
Цитата Сообщение от hoggy Посмотреть сообщение
уж точно не буду в уме вдуплять,
как выглядит голимая 16тиричная фигня в двоичном виде.
Перестань отвечать на вопросы, заданные не тебе.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
24.08.2019, 23:39  [ТС]
Цитата Сообщение от hoggy Посмотреть сообщение
для любителей зажигать лампочки перекладывать биты,
есть православный bitset
мне когда-то приходилось иметь дело с битами в С++ и я устанавливал к примеру бит события в 1 чтобы оно не попадало в порт завершения вот так
C++
1
hEvent |= 0x1
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
24.08.2019, 23:54
Цитата Сообщение от ReYalp Посмотреть сообщение
мне когда-то приходилось иметь дело с битами в С++ и я устанавливал к примеру бит события в 1 чтобы оно не попадало в порт завершения вот так
ReYalp, всё верно. Для работы с портами железа такие вещи и применяют. Так я же и говорю, - идею 16-ричной записи байта одобрил в одном порту знаменитый финикийский пират. Ему одним глазом было легче читать короткую запись. Кроме всего он был хоть и одноглазый но не тупой и понимал, что 33 это две двоичные тройки: 110011, а учитывая что у байта 8 вёсел то ещё два ведущих нуля нужны: 00110011. В чём тут напряг? А ещё бонус в том, что римляне понимают римский алфавит, но десятичные арабские цифры для них - китайская грамота. А арабы не знают латиницы. То есть, отличная система которую понимают только хакеры пираты.
1
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
25.08.2019, 00:00  [ТС]
IGPIGP, и еще никогда не задумывался что значит 0x в начале?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
25.08.2019, 00:12
Цитата Сообщение от ReYalp Посмотреть сообщение
и еще никогда не задумывался что значит 0x в начале?
Почему? Намекаете на то, что череп с косточками не разглядели когда-то ( 0x ), а теперь, читая мою, чистую как слеза пирата правду, постигли суть происходящего?
1
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
25.08.2019, 00:23  [ТС]
IGPIGP, а если серьезно?
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
25.08.2019, 00:32
ReYalp, x - это от слова heXadecimal - шестнадцатеричный. А 0 в начале - это синтаксический костыль, чтобы можно было продолжать считать такой литерал числом (если мы уберем 0, то получим идентификатор, т.к. он начинается с буквы, по правилам С).
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
25.08.2019, 00:44
Цитата Сообщение от ReYalp Посмотреть сообщение
IGPIGP, а если серьезно?
Дык, я же серьёзно. Фамилия пирата была Парсер. Он черепушку и придумал. Отсюда - "лысый череп", в известном пиратском приветствии. Это история полная легенд. Например, когда пират понял, что десяти арабских цифр не хватит, он не сразу додумался использовать буквы. Капитан не был математиком и рассуждал так, - ноль он и в Африке ноль, - то есть череп. И нужно ещё 15 знаков. Он рассадил за столом 16 пиратов и одного большого и лысого назначил нулём. От него считали по часовой стрелке (хотя не факт, - может и наоборот). Сразу стала вытанцовываться последовательность из 9 арабских цифр. И ещё шести человек. Так родилась знаменитая формула "15 человек на сундук мертвеца".
Это всё можно считать пруфом, так что я не выдумал ни чего. Может чуть приукрасил только.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
25.08.2019, 00:47  [ТС]
IGPIGP, интересно,а у этого пирата был компьютер?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
25.08.2019, 00:51
Цитата Сообщение от ReYalp Посмотреть сообщение
IGPIGP, интересно,а у этого пирата был компьютер?
А как иначе? Сколько пиратов - столько и компьютеров, всегда. Только если учесть, что байт это лодка, то компьютеры были очень большие. А вообще, система счисления не зависит от компьютерного представления.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
25.08.2019, 00:53  [ТС]
IGPIGP, а что за ОС у него была?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
25.08.2019, 01:05
Цитата Сообщение от ReYalp Посмотреть сообщение
GPIGP, а что за ОС у него была?
Какая ОС? Всё в инструкциях центрального процессора. А ось - пополам ему была. Он же пират! Ось пополам, кстати, тоже из тех времён.
ReYalp, сейчас придут центурионы и разгонят пиратов по всей архитектуре акватории. Я конечно, погряз в истории, но по сути, запись очень логична. По пол байта каждая 16-ричная цифра. Хотя вопрос дискуссионный, конечно. Можно и в двоичном виде писать. Суть не изменится. Однако, если в порт пишутся (или читаются из) именно связанные комбинации, то с короткими константами проще, наверное. Пираты - люди не привыкшие к долгим и пристальным исследованиям. Они прагматичны и настроены на результат. И если 0x33 даёт именно то, что требуется, то: - "Йо-хо-хо и бутылка рома!".
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.08.2019, 01:05

Дана строка - запись числа в двоичной системе счисления. Преобразуйте ее в строку - запись числа в шестнадцатеричной системе счисления
Дана строка, представляющая собой запись числа в двоичной системе счисления. Преобразуйте ее в строку, представляющую собой запись числа в...

Запись в бинарный файл в шестнадцатеричной системе
в в шестнадцатеричной системе static void Main(string args) { string aplha =...

Запись числа -2047 в шестнадцатеричной системе счисления
Нужно записать FFFFFFFFFFFFF801 с помощью 3 символов. Это возможно вообще?

Вывести запись в виде 4 знаков в шестнадцатеричной системе
напишите программу, используя процедуру, которая выводит на экран запись числа меньшего, чем 16^4=65536 в виде 4 знаков в шестнадцатиричной...

Заменить каждый элемент списка на его запись в шестнадцатеричной системе счисления
Помогите пожалуйста! Дан список,содержащий запись целых неотрицательных чисел в двоичной системе счисления. Заменить каждый элемент...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 6. Питон реализация энилоджиковской модели, картинка про Центральную часть будущей модели
anaschu 26.06.2026
Етить. ИИ мне на основе моего старого файла R создал вот эту вот хмерь на пайтоне. Это уже новая модель, модель сукцессии грибной. потоки фосфора, азота. Углерода. 5 видов организмов. Я даже. . .
Как замкнутый ядерный цикл решит проблему недостатки фосфора? Био миграция фосфора со дна океана
anaschu 26.06.2026
Биологический лифт: Концепция подъема фосфора со дна океана с помощью ЗЯТЦ Предлагаю на обсуждение альтернативу тяжелому промышленному бурению океанического дна. Вместо сложной инженерии мы можем. . .
сукцессия 5
anaschu 26.06.2026
ПЛАН РАЗРАБОТКИ математической модели сукцессии микоризных систем Переход AM → EcM (Endo + ErM) · Шумилов А. С. · ИФХиБПП РАН · Пущино · 2026 . . .
сукцессия 4
anaschu 25.06.2026
Более детализированный план разработки План доработки модели динамики микоризных симбиозов (EcM с гистерезисом) Цель: Реализовать логику переключения между эрикоидным (ErM) и эктомикоризным. . .
сукцессия 3
anaschu 25.06.2026
Примерный план работ по модели
сукцессия 2
anaschu 25.06.2026
параметризировочная калибровочная таблица будущей модели
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал Материалы для обсуждения с МГСУ · 2026 Рисунки внутри приложенного ворд файла. Что за. . .
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования? Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная. Где разрыв . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru