Что такое hex dec oct bin
bin, oct, hex – системы исчисления
Вспомним основы информатики и поговорим о системах исчисления. В жизни мы привыкли к десятичной системе (base-10 или decimal), железо компьютеров оперирует в системе двоичной (base-2 или binary) – нулями и единицами. Часто приходится иметь дело с системой шестнадцатиричной (base-16 или hexadecimal), она позволяет записывать данные в 8 раз короче, чем двоичная. Реже встречается система восьмеричная (base-8 или octal). Система исчисления – это всего лишь средство представления числа, т.е. то, как мы его в строчку запишем или считаем, само число остается самим собой, независимо от системы.
Чтобы получить целое число из строки, записанной в какой-то системе исчисления, используем функцию int (второй параметр – база системы):
Наоборот сделать из числа строку в какой-то системе – встроенные функции bin, oct и hex:
Однако, часто приходится иметь дело с чистыми HEX-данными без префиксов. Многие (да и я) делали вот так:
Т.е. просто отрезали первые два символа. Это не очень интуитивно, да и может привести к неправильному поведению, если передать отрицательное число:
К счастью, есть встроенная функция format(value, format_spec) (не путать с str.format ), которая форматирует значение, согласно спецификатору форматирования:
🐉 Специально для канала @pyway. Подписывайтесь на мой канал в Телеграм @pyway 👈
MS-DOS и TASM 2.0. Часть 6. Системы счисления.
Три системы счисления.
Практическое программирование на ассемблере требует понимания системы счисления. Систем счисления существует бесконечное множество. Наиболее знакомая для нас — десятичная система счисления. Римская нумерация циферблата часов демонстрирует нам двенадцатеричную систему счисления. Программистам на ассемблере необходимо освоить три системы счисления : десятичную, двоичную и шестнадцатеричную.
Машина «думает» байтами. Байт состоит из 8 бит. Бит может содержать одно значение: 0 или 1. Так что в принципе, неплохо иметь представление и о восьмеричной системе счисления.Однако машинный код отображается в различных редакторах в виде шестнадцатеричного значения — оно более удобно для восприятия, так что всё же остановимся на трёх обязательно необходимых программисту системах счисления.
Двоичная система счисления — основа мироздания.
Вы помните Даосский символ Инь и Янь? Он состоит из двух цветов, из двух понятий: чёрного и белого, мужского и женского, единицы и нуля. Согласно Даосской философии весь мир сформирован именно с помощью двух противоположных
и вместе с тем неразделимых понятий. Просто поражает гениальность древних мудрецов. С помощью единиц и нулей человек создаёт множество цифровых миров. Год от года они становятся всё более реалистичными. Интересно, догадывается
ли герой компьютерной игры, что весь его мир состоит всего из двух цифр или это только мы такие прозорливые :)?
Десятичная система счисления.
Двоичная система счисления аппретирует только двумя цифрами: Единицей
и Нулём (Инь и Янь). Привычная для нас система счисления — десятеричная. Если все цифры до десяти состоят из различных одиночных символов (от нуля до девятки), то десять отображается уже двумя символами — единицей и нулём, расположенных
в определённой последовательности (10 — единица перед нулём).
Шестнадцатеричная система счисления.
В шестнадцатеричной системе счисления одним символом отображаются числа от нуля до шестнадцати. Чтобы не сочинять новых отображений цифр,
решили использовать буквы латинского алфавита: A, B, C, D, E, F.
Для большей понятности — внизу приведена таблица соответствия цифр трём системам счисления.
Запоминать соответствия цифр нет необходимости. В состав Windows любой версии входит программа «калькулятор» — calc.exe. Запустите её, переключитесь в программистский вид (Вид->Программист или Alt+3) и да пребудет с вами сила!
Калькулятор программиста: HEX, DEC, OCT, BIN.
Три системы счисления — практическое использование.
Три системы счисления широко используются в программировании и отладке уже созданных программ.
Шестнадцатеричный (HEX) код удобен для современных процессоров, которые фактически развиваются на основе 16-ти разрядного процессора для персональных компьютеров Intel i8086. В исходных текстах программ практически всех языков программирования цифра обозначает по умолчанию число в десятичной системе счисления (DEC).
Десятичная система счисления более удобна (хотя и не всегда) при написании кода программ, шестнадцатеричная — неотъемлемая часть отладки, взлома, реверсивного программирования.
Двоичная система счисления (BIN) используется в основном при расстановке флагов определённых стилей объектов Windows (стили окон), но об этом попозже. Рассматривая 16 битное число в виде двоичного мы получаем великолепную возможность получить крохотный по размеру набор 16 флагов, где 1 — флаг установлен 0 — флаг снят (например, шестнадцатеричное число 4 000 соответствует двоичному 0100 0000 0000 0000 — установлен второй флаг, остальные сняты; шестнадцатеричное число 3000 соответствует двоичному числу 0011 0000 0000 0000 — установлены третий и четвёртый флаги, остальные сняты ).
Если мы хотим обозначить принадлежность числа к 16-тиричной системе счисления, то:
1. Ассемблер — добавляем к числу постфикс h (H), например: 100h = 256, 10H=16. Иногда для понимания того, что мы имеем дело с числом, в качестве префикса ставят 0 (ноль).
2. Си (С++) к числу добавляется суффикс 0x (0X).
Например: 0x100 = 100h = 0100h = 256, 0x10 = 10H = 010H = 16
Для визуального восприятия шестнадцатеричного кода воспользуемся замечательным простым, но достаточно функциональным DOS редактором Hacker Viewer (Hiew). Вы найдёте его в папке D:\UTILS\HIEW\ (я надеюсь, что наш архив программ DOS-1.rar уже скачан и DOSBox установлен и запущен).
Запускаем HIEW (Hacker Viewer).
Инструкцию по пользованию Hiew для хакеров от Криса Касперского вы найдёте в папочке readme. Пользоваться редактором просто и удобно.
Откроем с помощью Hiew нашу программу PRG.COM (выбор файлов — F9). При помощи F4 выбираем режим отображения информации HEX (как вы уже знаете, шестнадцатеричный режим). Можете с помощью F4 или Enter по переключаться между режимами отображения.
Переключение режимов отображения в Hacker Viewer.
Обратите внимание на положение Decode (декодирование). Вам это ни о чём не говорит? Да, да, да в Hiew имеется встроенный дизассемблер и даже ассемблер! Можно внести изменения в ассемблерный код, не выходя из редактора и сохранить изменения.
Исполняемый файл останется рабочим — гениальная программа с поразительными возможностями для своего времени!
Подобное отображение HEX системы счисления вы увидите практически во всех отладочных программах и просмотрщиках файлов.
Перемещайте курсор с помощью клавиш стрелок на клавиатуре. Вверху вы заметите изменение цифры указателя (pointer).
Наша первая программа в шестнадцатеричном виде.
Указатель является одним из основополагающих понятий в системе программирования. Основы понимания работы с указателем рассмотрим попозже.
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.
hex dec oct bin что это
Системы счисления: основные сведения
Для перевода чисел из одной системы счисления в другую необходимо владеть основными сведениями о системах счисления и форме представления чисел в них.
Количество s различных цифр, употребляемых в системе счисления, называется основанием, или базой системы счисления. В общем случае положительное число X в позиционной системе с основанием s может быть представлено в виде полинома:
,
где s — база системы счисления, — цифры, допустимые в данной системе счисления
. Последовательность
образует целую часть X, а последовательность
— дробную часть X.
В вычислительной технике наибольшее применение нашли двоичная (BIN — binary), и двоично кодированные системы счисления: восьмеричная (OCT — octal), шестнадцатеричная (HEX — hexadecimal) и двоично-кодированная десятичная (BCD — binary coded decimal).
В дальнейшем для обозначения используемой системы счисления число будет заключаться в скобки, а в индексе указано основание системы. Число X по основанию s будет обозначено .
Две простые простые функции которые конвертируют числа из десятичной системы исчисления в систему исчисления с любым другим основанием и обратно.
Dec в Bin, Oct, Hex и прочие:
Bin, Oct, Hex и прочие в Dec:
Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Перенесено в отдельную статью: Excel. Как получить имя столбца по номеру и обратно в 1С
читал тут на хабре про вторую стадию программиста:
http://habrahabr.ru/company/veeam/blog/267187/
вас вспомнил)
http://infostart.ru/public/99748/
Моя текущая привычка именования переменных как раз из третьей стадии и происходит (коллегам понятнее именно так), но попробую исправиться.
В Функция AnyToDec() посоветовал бы использовать ВРег для тЗначение либо в начале
тЗначение = ВРег(тЗначение)
либо в середине Сред(ВРег(тЗначение), тСимвол, 1)
ну и по мелочи (все равно уже посчитано)
Для тСимвол = 1 По тДлина Цикл
Вначале исходное восьмеричное число раскладывается по позициям — смотри начало темы. Позиции нумеруются справа налево, начиная с нулевой. Для каждой позиции отыскивается по таблице N 3 соответствующее десятичное значение. Затем находится сумма всех, полученных для каждой десятичной позиции десятичных значений. Эта сумма и есть искомое десятичное число, соответствующее исходному восьмеричному числу. Например:
OCT — 7502 = 7502 = 7*8^3+5*8^2+0*8^1+2*8^0 = 3582+320+0+2 = 3906 – DEC
Преобразование DEC — OCT
Производится целочисленным последовательным делением десятичного числа на основание восьмеричной систему счисления — 8. После каждого деления, результат, больший 7, вновь делится на 8. После завершения всех делений, остатки считываются в обратном порядке, т.е. вначале записывается остаток от последнего деления, затем предыдущий и т.д., последним записывается остаток от первого деления.
Например : DEC — 1365 8 = 2525 – OCT
Преобразование BIN — DEC
Вначале двоичное число преобразуется в восьмеричное — смотри преобразование BIN-OCT, а затем полученное восьмеричное число преобразуется в десятичное — смотри преобразование OCT-DEC. Например:
BIN — 11101110111110 = 35676 — OCT — 3*8^4+5+8^3+6*8^2+7*8^1+6*8^0 = 12288+2560+384+56+6=15294
Преобразование DEC — BIN
Вначале десятичное число преобразуется в восьмеричное — смотри преобразование DEC-OCT, а затем полученное восьмеричное число преобразуется в двоичное — смотри преобразование OCT-BIN. Например:
DEC – 64536 8 = 176030 – OCT – 1111110000011000 – BIN
Преобразование HEX — DEC
Можно выполнить в три этапа: в начале исходное восьмеричное число преобразуется в двоичное — смотри преобразование HEX-BIN, затем полученное двоичное число преобразуется в соответствующее ему восьмеричное число — смотри преобразование BIN-OCT, и наконец, полученное восьмеричное число преобразуется в десятичное — смотри преобразование OCT-DEC.
Преобразование DEC – HEX
Не нашли то, что искали? Воспользуйтесь поиском:
Лучшие изречения: Студент — человек, постоянно откладывающий неизбежность. 10580 — | 7333 —
или читать все.
78.85.5.224 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.
Отключите adBlock!
и обновите страницу (F5)
очень нужно
Дневники чайника. Чтива 0, виток0
Системы счисления и устройство памяти.
Второй день
Поскольку компьютер в основе своей имеет только 0 и 1, на первых этапах освоения ассемблера (может быть, год) нам будут нужны только целые числа, мало того, очень долго можно работать всего лишь с положительными целыми числами, о которых здесь и пойдёт речь.
Только целые и только положительные.
Возможно, вы проходили эту тему в школе, и кто-то из вас даже что-то помнит, но начинать нужно именно отсюда.
Все значения представляются этими символами. Вы и сами знаете, как пользоваться десятичной системой, так как мы все выросли на ней и каждую минуту чего-нибудь считаем.
Нетрудно догадаться, что двоичная система имеет всего два символа 0 и 1.
Бит может иметь значение 0 или 1.
Как вы думаете, почему я выделил 2,4,8,16?
Правильно, это «круглые» цифры. В десятичной системе они, конечно, не круглые, но в двоичной получается 10,100,1000,10000. Поэтому десятичная система для компьютерных вычислений не очень подходит. Вместо неё используется.
Имеет целых 16 символов. Чтоб не придумывать новые символы, в hex используются буквы латинского алфавита.
Я приравняю все hex-символы к десятичным значениям.
В этой системе счисления ноль справа прибавляется при умножении на 16 (десятичных).
Лишние нули слева от числа значения не имеют, так же, как и в математике.
Однако если число начинается с буквы (A-F), ноль слева нужен при наборе программ. Иначе как компилятор будет определять, что началось число? А чтобы не путать числа в разных системах и писать при этом коротко, пишут:
Удобно, правда? А вот так?
Неудобно. Поэтому всегда ВСЕ ВЫЧИСЛЕНИЯ ДЕЛАЙТЕ В ОДНОЙ СИСТЕМЕ!
Сам я никогда не перевожу из hex в dec и в bin в уме или на листочке, для этого есть калькулятор. И мне знакома эта растерянность перед новыми цифрами. Но я и не рассчитываю, что стало понятно хоть что-то. Просто вы должны знать, что системы счисления hex & bin существуют. Через месяц практики вы привыкнете к шестнадцатиричной системе как к родной. А вот двоичная будет использоваться только в пределах четырёх байт. На экране монитора мне лишь изредка приходится видеть биты как «01011010», хотя часто их очень не хватает.
Теперь ещё раз про байт.
В байт умещаются ровно два разряда hex-системы счисления! Именно так мы и будем видеть байты. Вспомните наш нулевой эксперимент:
Теперь вы понимаете, что я имел в виду, сказав: «90 здесь 144». Правильнее было бы сказать 90h = 144d.
Если нужно прочитать информацию, например, из бита 900, то нам нужно обратиться к 112-му байту и посмотреть в нём бит номер 4.
Хотя так информацию мы видеть практически не будем. Вместо битов везде будут hex-байты, вот так:
А сейчас запомните. Когда я пишу: адрес в файле, я подразумеваю номер байта в файле от нуля. И это норма. А вот когда я пишу: адрес в памяти, это значит, что речь идёт о части логического адреса, называемой смещением (тоже от нуля).
Да простят меня профи за такую вольность.
Юнга, после обеда я научу тебя писать дельные программы для вспомогательного бортового оборудования. Ты, конечно, пуст, как первая ступень, и ни черта не понял за сегодня, но у меня нет времени рассусоливать, нас давно ждут.
Первая полезная программа
Что там у нас дальше по учебнику? Этого вам пока не надо. Этого я и сам ещё не знаю. Тут слишком много умностей. Нет, пожалуй, продолжу, как предложил Олег Калашников. Пожалуй, лучший подход для любителей практики.
Эксперимент 01 (prax01.com)
Я по-прежнему подразумеваю, что вы используете WinXP и пример должен работать.
Нет, это ещё не программа, этот файл выполнять не нужно. Откройте в Hiew’e.
Сейчас вы видите 1, если нажать «F4» (Mode), то, как и в тот раз, вы увидите байт в hex-виде. F4 еще раз покажет дизассемблерный код. Если в файле единица, то выглядеть код будет так:
В отличие от команды nop, которую вы уже видели, большинство команд используют предметы для действия.
Предмет, с (или над) которым производится действие, называется операнд.
Операнды в ассемблере для Интел-совместимых процессоров принято разделять запятыми. То есть в некоторых системах или в других языках программирования пишут:
AX xor 44
или вполне может быть такая форма записи:
44,55 xоr AX
Но в x86 ассемблере принято писать так:
Из всего этого главное сейчас усвоить, что операндов не больше трёх (чащё всего 2), они разделяются запятыми и идут после имени команды. Давайте писать настоящую программу на ассемблере.
В Hiew’e (когда вы видите дизассемблерный код нашего файла) нажмите F3 и затем Enter. Теперь можно набирать программу на ассемблере (символ «1» в файле должен стереться). Каждая инструкция вводится Enter’ом и превращается в строку, если нет явной ошибки. Пробелы нужны только для удобства, поэтому неважно, сколько их. Пишите как хотите, строчными или прописными буквами, но только по-англицки. 🙂
Вот код программы, его нужно набрать:
Когда всё напишете, нажмите один раз Esc, чтобы прекратить ассемблирование, и F9, чтобы сохранить файл.
Это был весь код программы, которая должна выводить строку на экран! Круто, правда? Только не хватает самой строки.
Это может выглядеть примерно так:
Закорючки будут другие, но вид такой. Сохраните программу. Откройте снова в Hiew’e.
Принято так, что после точки с запятой идёт комментарий, просто пояснение для людей. В этом примере я откомментировал все строки кода программы. Только вам от этого пока не легче.
Видите, начиная с адреса в файле 0000000Dh, появились команды, которые вы не писали, это всего лишь строка текста. Её процессор выполнять не будет только потому, что перед строкой текста стоит код завершения (int 20).
«$» не выводится. Хм, интересно :/ Это условный символ конца строки?
Да, но в windows мы будем использовать нулевой байт (00h) для этой же цели.
Вот, уже получилась полнофункциональная программа для DOS, которая будет работать и в Windows.
Прямо так и вижу следующие «почему»:
Почему mov?
Почему ah?
Почему 9?
И вообще, что это за подпрограммы-прерывания int 16, int 21, int 20.
Последний вопрос меня тоже очень огорчил, когда впервые столкнулся с этим примером. Я ожидал получить программу на чистом Ассемблере, а был вынужден использовать какие-то непонятные функции, которых не писал.
На самом деле вывод строки на экран без специальной DOS-функции ничуть не сложнее. Мы используем именно такой способ из-за того, что он наиболее схож с программированием под Win. Здесь было бы аккуратнее и быстрее выводить на экран без специальной подпрограммы DOS-функций.
Но ДОС в прошлом, а нас ждёт Win32.
Cамое главное не переживать, если вы вдруг не понимаете что здесь к чему, поверьте, через пару уроков вы полностью поймёте эту программу.
Шестнадцатеричный код.
Шестнадцатеричная система счисления (также — шестнадцатеричный код) является позиционной системой счисления с целочисленным основанием 16. Иногда в литературе также используется термин hex (произносится «хекс», сокращение от англ. hexadecimal). Цифрами данной системы счисления принято использовать арабские цифры 0—9, а также первые символы латинского алфавита A—F. Буквы соответствуют следующим десятичным значениями:
Таким образом, десять арабских цифр вкупе с шестью латинскими буквами и составляют шестнадцать цифр системы.
Кстати, на нашем сайте вы можете перевести любой текст в десятичный, шестнадцатеричный, двоичный код воспользовавшись Калькулятором кодов онлайн.
Применение. Шестнадцатеричный код широко применяется в низкоуровневом программировании, а также в различных компьютерных справочных документах. Популярность системы обоснована архитектурными решениями современных компьютеров: в них в качестве минимальной единицы информации установлен байт (состоящий из восьми бит) — а значение байта удобно записывать с помощью двух шестнадцатеричных цифр. Значение байта может ранжироваться с #00 до #FF (от 0 до 255 в десятичной записи) — другими словами, используя шестнадцатеричный код, можно записать любое состояние байта, при этом не остаётся «лишних» не используемых в записи цифр.
В кодировке Юникод для записи номера символа используется четыре шестнадцатеричных цифры. Запись цвета стандарта RGB (Red, Green, Blue — красный, зелёный, синий) также часто использует шестнадцатеричный код (например, #FF0000 — запись ярко-красного цвета).
Способ записи шестнадцатеричного кода.
Математический способ записи. В математической записи основание системы записывают в десятичном виде в нижнем индексе справа от числа. Десятичную запись числа 3032 можно записать как 303210, в шестнадцатеричной системе данное число будет иметь запись BD816.
В синтаксисе языков программирования. Синтаксис различных языков программирования по-разному устанавливает формат записи числа, использующего шестнадцатеричный код:
* В C, C++ и схожих языках (Java) для этого используется префикс «0x», например: 0x0A0B;
* В синтаксисе некоторых разновидностей языка ассемблера используется латинская буква «h», которая ставится справа от числа, например: 20Dh. Если число начинается с латинской буквы, то перед ним ставится ноль, например: 0A0Bh. Это сделано для того, чтобы отличать от констант значения, использующие шестнадцатеричный код;
* В языке разметки HTML, а также в каскадных файлах CSS, для указания цвета в формате RGB с шестнадцатеричной системой записи, используется префикс «#»: #00DC00.
Как перевести шестнадцатеричный код в другую систему?
Перевод из шестнадцатеричной системы в десятичную. Для совершения операции перевода из шестнадцатеричной системы в десятичную, требуется представить исходное число как сумму произведений цифр в разрядах шестнадцатеричного числа на степень основания.