HEX, DEC, BIN должны быть понятны кодеру.
Три системы счисления.
Практическое программирование на ассемблере требует понимания системы счисления. Систем счисления существует бесконечное множество. Наиболее знакомая для нас — десятичная система счисления. Римская нумерация циферблата часов демонстрирует нам двенадцатеричную систему счисления. Программистам на ассемблере необходимо освоить три системы счисления : десятичную, двоичную и шестнадцатеричную.
Машина «думает» байтами. Байт состоит из 8 бит. Бит может содержать одно значение: 0 или 1. Так что в принципе, неплохо иметь представление и о восьмеричной системе счисления.Однако машинный код отображается в различных редакторах в виде шестнадцатеричного значения — оно более удобно для восприятия, так что всё же остановимся на трёх обязательно необходимых программисту системах счисления.
Двоичная система счисления — основа мироздания.
Вы помните Даосский символ Инь и Янь? Он состоит из двух цветов, из двух понятий: чёрного и белого, мужского и женского, единицы и нуля. Согласно Даосской философии весь мир сформирован именно с помощью двух противоположных
и вместе с тем неразделимых понятий. Просто поражает гениальность древних мудрецов. С помощью единиц и нулей человек создаёт множество цифровых миров. Год от года они становятся всё более реалистичными. Интересно, догадывается
ли герой компьютерной игры, что весь его мир состоит всего из двух цифр или это только мы такие прозорливые :)?
Десятичная система счисления.
Двоичная система счисления аппретирует только двумя цифрами: Единицей
и Нулём (Инь и Янь). Привычная для нас система счисления — десятеричная. Если все цифры до десяти состоят из различных одиночных символов (от нуля до девятки), то десять отображается уже двумя символами — единицей и нулём, расположенных
в определённой последовательности (10 — единица перед нулём).
Шестнадцатеричная система счисления.
В шестнадцатеричной системе счисления одним символом отображаются числа от нуля до шестнадцати. Чтобы не сочинять новых отображений цифр,
решили использовать буквы латинского алфавита: A, B, C, D, E, F.
Для большей понятности — внизу приведена таблица соответствия цифр трём системам счисления.
DEC BIN HEX Десятичная Двоичная Шестнадцатиричная 0 0 0 1 1 1 2 10 2 3 11 3 4 100 4 5 101 5 6 110 6 7 111 7 8 1000 8 9 1001 9 10 1010 A 11 1011 B 12 1100 C 13 1101 D 14 1110 E 15 1111 F 16 10000 10 17 10001 11 18 10010 12 ….
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | DEC BIN HEX Десятичная Двоичная Шестнадцатиричная 0 0 0 1 1 1 2 10 2 3 11 3 4 100 4 5 101 5 6 110 6 7 111 7 8 1000 8 9 1001 9 10 1010 A 11 1011 B 12 1100 C 13 1101 D 14 1110 E 15 1111 F 16 10000 10 17 10001 11 18 10010 12 …. |
Запоминать соответствия цифр нет необходимости. В состав 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
Хакерский редактор Hacker Viewer (Hiew) .
Для визуального восприятия шестнадцатиричного кода воспользуемся замечательным простым, но достаточно функциональным DOS редактором Hacker Viewer (Hiew). Вы найдёте его в папке D:\UTILS\HIEW\ (я надеюсь, что наш архив программ
Инструкцию по пользованию Hiew для хакеров от Криса Касперского вы найдёте в папочке readme. Пользоваться редактором просто и удобно.
Откроем с помощью Hiew нашу программу PRG.COM (выбор файлов — F9). При помощи F4 выбираем режим отображения информации HEX (как вы уже знаете, шестнадцатеричный режим). Можете с помощью F4 или Enter по переключаться между режимами отображения.
Переключение режимов отображения в Hacker Viewer.Обратите внимание на положение Decode (декодирование). Вам это ни о чём не говорит? Да, да, да в Hiew имеется встроенный дизассемблер и даже ассемблер! Можно внести изменения в ассемблерный код, не выходя из редактора и сохранить изменения.
Подобное отображение HEX системы счисления вы увидите практически во всех отладочных программах и просмотрщиках файлов.
Перемещайте курсор с помощью клавиш стрелок на клавиатуре. Вверху вы заметите изменение цифры указателя (pointer).
Указатель является одним из основополагающих понятий в системе программирования. Основы понимания работы с указателем рассмотрим попозже.
Ответы@Mail.Ru: 16-ти ричная система исчисления
Шестнадцатеричная система счисления (шестнадцатеричные числа) — позиционная система счисления по целочисленному основанию 16. Обычно в качестве шестнадцатеричных цифр используются десятичные цифры от 0 до 9 и латинские буквы от A до F для обозначения цифр от 10 до 15 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F). Широко используется в низкоуровневом программировании и вообще в компьютерной документации, поскольку в современных компьютерах минимальной единицей памяти является 8-битный байт, значения которого удобно записывать двумя шестнадцатеричными цифрами. Такое использование началось с системы IBM/360, где вся документация использовала шестнадцатеричную систему, в то время как в документации других компьютерных систем того времени (даже с 8-битными символами, как, например, PDP-11 или БЭСМ-6) использовали восьмеричную систему. В стандарте Юникода номер символа принято записывать в шестнадцатеричном виде, используя не менее 4 цифр (при необходимости — с ведущими нулями) . В математике систему счисления принято писать в подстрочном знаке. Например, десятичное число 1443 можно записать как 144310 или как 5A316. разных языках программирования для записи шестнадцатеричных чисел используют различный синтаксис: В Ада и VHDL такие числа указывают так: «16#5A3#». В Си и языках схожего синтаксиса, например, в Java, используют префикс «0x». Например, «0x5A3». В некоторых ассемблерах используют букву «h», которую ставят после числа. Например, «5A3h». При этом, если число начинается не с десятичной цифры, впереди ставится «0» (ноль) : «0FFh» (25510) Другие ассемблеры (AT&T, Motorola), а также Паскаль и некоторые версии Бэйсика используют префикс «$». Например, «$5A3». Некоторые иные платформы, например ZX Spectrum в своих ассемблерах (MASM, TASM, ALASM, GENS и т. д. ) использовали запись #5A3, обычно выровненную до одного или двух байт: #05A3. Другие версии Бэйсика используют для указания шестнадцатеричных цифр сочетание «&h». Например, «&h5A3». В Unix-подобных операционных системах (и многих языках программирования, имеющих корни в Unix/linux) непечатные символы при выводе/вводе кодируются как \xCC, где CC — шестнадцатеричный код символа. Перевод чисел из шестнадцатеричной системы в десятичную Для перевода шестнадцатеричного числа в десятичное необходимо это число представить в виде суммы произведений степеней основания шестнадцатеричной системы счисления на соответствующие цифры в разрядах шестнадцатеричного числа. Например, требуется перевести шестнадцатеричное число 5A3 в десятичное. В этом числе 3 цифры. В соответствии с вышеуказанным правилом представим его в виде суммы степеней с основанием 16: 5A316=3·160+10·161+5·162 =3·1+10·16+5·256=3+160+1280=144310 Для перевода многозначного двоичного числа в шестнадцатеричную систему нужно разбить его на тетрады справа налево и заменить каждую тетраду соответствующей шестнадцатеричной цифрой. Например: 0101101000112=0101 1010 0011=5A316
<img src=»https://otvet.imgsmail.ru/download/210381790_efc0ab1af57c1ba46206ab00028bb4ea_800.gif» alt=»» data-big=»1″ data-lsrc=»//otvet.imgsmail.ru/download/210381790_efc0ab1af57c1ba46206ab00028bb4ea_120x120.gif»>
Шестнадцатеричная система счисления — это… Что такое Шестнадцатеричная система счисления?
Системы счисления в культуре | |
---|---|
Индо-арабская система счисления | |
Арабская Индийские Тамильская Бирманская | Кхмерская Лаоская Монгольская Тайская |
Восточноазиатские системы счисления | |
Китайская Японская Сучжоу Корейская | Вьетнамская Счётные палочки |
Алфавитные системы счисления | |
Абджадия Армянская Ариабхата Кириллическая | Греческая Эфиопская Еврейская Катапаяди |
Другие системы | |
Вавилонская Египетская Этрусская Римская | Аттическая Кипу Майская |
Позиционные системы счисления | |
Десятичная система счисления (10) | |
2, 3, 4, 5, 6, 7, 8, 9, 12, 16, 20, 60 | |
Нега-позиционная система счисления | |
Симметричная система счисления | |
Смешанные системы счисления | |
Фибоначчиева система счисления | |
Непозиционные системы счисления | |
Единичная (унарная) система счисления | |
Список систем счисления |
Шестнадцатеричная система счисления (шестнадцатеричные числа) — позиционная система счисления по целочисленному основанию 16.
Обычно в качестве шестнадцатеричных цифр используются десятичные цифры от 0 до 9 и латинские буквы от A до F для обозначения цифр от 1010 до 1510, то есть (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F).
Применение
Широко используется в низкоуровневом программировании и компьютерной документации, поскольку в современных компьютерах минимальной единицей памяти является 8-битный байт, значения которого удобно записывать двумя шестнадцатеричными цифрами. Такое использование началось с системы IBM/360, где вся документация использовала шестнадцатеричную систему, в то время как в документации других компьютерных систем того времени (даже с 8-битными символами, как, например, PDP-11 или БЭСМ-6) использовали восьмеричную систему.
В стандарте Юникода номер символа принято записывать в шестнадцатеричном виде, используя не менее 4 цифр (при необходимости — с ведущими нулями).
Шестнадцатеричный цвет — запись трёх компонент цвета (R, G и B) в шестнадцатеричном виде.
Способы записи
В математике
В математике основание системы счисления принято указывать в десятичной системе в нижнем индексе. Например, десятичное число 1443 можно записать как 144310 или как 5A316.
В языках программирования
В разных языках программирования для записи шестнадцатеричных чисел используют различный синтаксис:
- В Ада и VHDL такие числа указывают так: «16#5A3#».
- В Си и языках схожего синтаксиса, например, в Java, используют префикс «0x». Например, «0x5A3».
- В некоторых ассемблерах используют букву «h», которую ставят после числа. Например, «5A3h». При этом, если число начинается не с десятичной цифры, то для отличия от имён идентификаторов (например, констант) впереди ставится «0» (ноль): «0FFh» (25510)
- Другие ассемблеры (AT&T, Motorola), а также Паскаль и некоторые версии Бейсика используют префикс «$». Например, «$5A3».
- Некоторые иные платформы, например ZX Spectrum в своих ассемблерах (MASM, TASM, ALASM, GENS и т. д.) использовали запись #5A3, обычно выровненную до одного или двух байт: #05A3.
- Другие версии Бейсика используют для указания шестнадцатеричных цифр сочетание «&h». Например, «&h5A3».
- В Unix-подобных операционных системах (и многих языках программирования, имеющих корни в Unix/linux) непечатные символы при выводе/вводе кодируются как 0xCC, где CC — шестнадцатеричный код символа.
В электронных калькуляторах
Б3-34 и ему подобные используют «-», «L», «C», «Г», «E» « » (space) на их экране.
Перевод чисел из одной системы счисления в другую
Перевод чисел из шестнадцатеричной системы в десятичную
Для перевода шестнадцатеричного числа в десятичное необходимо это число представить в виде суммы произведений степеней основания шестнадцатеричной системы счисления на соответствующие цифры в разрядах шестнадцатеричного числа.
Например, требуется перевести шестнадцатеричное число 5A3 в десятичное. В этом числе 3 цифры. В соответствии с вышеуказанным правилом представим его в виде суммы степеней с основанием 16:
5A316 = 3·160+10·161+5·162= 3·1+10·16+5·256 = 3+160+1280 = 144310
Перевод чисел из двоичной системы в шестнадцатеричную и наоборот
Для перевода многозначного двоичного числа в шестнадцатеричную систему нужно разбить его на тетрады справа налево и заменить каждую тетраду соответствующей шестнадцатеричной цифрой. Для перевода числа из шестнадцатеричной системы в двоичную нужно заменить каждую его цифру на соответствующую тетраду из нижеприведенной таблицы перевода.
Например:
Таблица перевода чисел
0hex | = | 0dec | = | 0oct | 0 | 0 | 0 | 0 | |||
1hex | = | 1dec | = | 1oct | 0 | 0 | 0 | 1 | |||
2hex | = | 2dec | = | 2oct | 0 | 0 | 1 | 0 | |||
3hex | = | 3dec | = | 3oct | 0 | 0 | 1 | 1 | |||
4hex | = | 4dec | = | 4oct | 0 | 1 | 0 | 0 | |||
5hex | = | 5dec | = | 5oct | 0 | 1 | 0 | 1 | |||
6hex | = | 6dec | = | 6oct | 0 | 1 | 1 | 0 | |||
7hex | = | 7dec | = | 7oct | 0 | 1 | 1 | 1 | |||
8hex | = | 8dec | = | 10oct | 1 | 0 | 0 | 0 | |||
9hex | = | 9dec | = | 11oct | 1 | 0 | 0 | 1 | |||
Ahex | = | 10dec | = | 12oct | 1 | 0 | 1 | 0 | |||
Bhex | = | 11dec | = | 13oct | 1 | 0 | 1 | 1 | |||
Chex | = | 12dec | = | 14oct | 1 | 1 | 0 | 0 | |||
Dhex | = | 13dec | = | 15oct | 1 | 1 | 0 | 1 | |||
Ehex | = | 14dec | = | 16oct | 1 | 1 | 1 | 0 | |||
Fhex | = | 15dec | = | 17oct | 1 | 1 | 1 | 1 | |||
См. также
Ссылки
Шестнадцатеричная арифметика
12.03.2009 84686 Пишу 36 комментариев компьютерная теорияДорогие друзья, спасибо всем, кто отписался в этой статье. Откровенно говоря, когда я её писал, то не задумывался о том, что она будет так популярна (самая популярная статья на этом сайте). Видимо в самом деле стоит дописать её, чтобы полнее осветить тему. Какие-то куски старой статьи останутся здесь без изменения, что-то я дополню, еще что-то — перепишу. Итак, приступим.
Как перевести шестнадцатеричное число в десятичное?
Всё не так страшно, как может показаться в самом начале, и начнем мы с привычной всем нам десятичной арифметики. Во втором классе средней школы нас учили, например, что число 136, это — 100 + 30 + 6.
Десятичная система счисления является позиционной, так как цифры в числах (разряды) обозначают разные величины в зависимости от того, в каком месте они находятся. Поясню примером: В числе 1375 цифра 3 обозначает три сотни, так как стоит в третьей позиции или разряде; а в числе 136 из предыдущего примера тройка — это лишь три десятка, так как стоит она во втором разряде. Цифра 3 в этих примерах обозначает разные числа, так как находится в разных разрядах. Полезно вспомнить три основных правила:
- В десятичной системе счисления всего десять цифр (чисел, записываемых одним символом) — от 0 до 9.
- Число десять — первое число, которое нельзя записать одной цифрой.
- Число десять является основанием десятичной системы счисления.
Поясню эти правила. С первым всё понятно. Второе: действительно, когда все числа из одной цифры исчерпаны, принято составлять числа из двух и более знаков (цифр): 10, 11, 12 и т. д. Чтобы проиллюстрировать третье правило, давайте вспомним о степенях — это сведения математики пятого класса средней школы. Чтобы возвести число А в степень х, необходимо число А умножить само на себя и множителей должно быть x штук. При этом А называется основанием степени, а х — показателем, записывается как Ах Вспомним ещё одно правило: любое число А в нулевой степени равно единице, то есть А0 = 1.
Теперь вернемся к нашему первому примеру — числу 136. Используя только что восстановленные в сознании правила, его можно записать так: 136 = 100 + 30 + 6 = 1×102 + 3×101 + 6×100.
Разряды чисел принято нумеровать справа налево и начинать при этом с нуля. Эти числа соответствуют показателям степеней, в которые надо возвести десятку в только что показанной записи. Приведем еще один пример — число 1375: 1375 = 1000 + 300 +70 + 5 = 1×103 + 3×102 + 7×101 + 5×100.
Понятно, что таким способом можно расписать любое целое десятичное число.
Настало время перейти к шестнадцатеричной системе счисления. Она тоже является позиционной, то есть цифры означают в ней разные числа в зависимости от разряда, в котором находятся. Шестнадцатеричная арифметика тоже подчиняется трём правилам, но они немного изменены для неё.
- В шестнадцатеричной системе счисления 16 цифр (чисел, которые можно записать одним символом). Это цифры от 0 до 9 и первые шесть символов латинского алфавита — A, B, C, D, E, F. Можно при записи использовать и прописные буквы a, b, c, d, e, f. Все эти цифры соответствуют десятичным числам от нуля до 15.
- Число, которое соответствует десятичному 16 — первое, которое нельзя записать одной цифрой. Проиллюстрируем это рядами чисел:
Таблица 1. Соответствие десятичных чисел шестнадцатеричным
Десятичные | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
Шестнадцатеричные | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f | 10 |
10-ная система | 16-ная система |
---|---|
0 | 0 |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 8 |
9 | 9 |
10 | a |
11 | b |
12 | c |
13 | d |
14 | e |
15 | f |
16 | 10 |
Из этого примера видно, что числа в шестнадцатеричной арифметике формируются по тем же правилам — когда исчерпаны все числа, состоящие из одной цифры, мы используем уже две цифры для записи чисел и т. д.
- Шестнадцать — основание в своей системе счисления. То есть, расписывая в ней числа, нужно в степень возводить число 16, а не десятку, как мы привыкли. Это, кстати говоря, позволит нам узнать, чему равно то или иное шестнадцатеричное число.
Как, например, понять, чему равно шестнадцатеричное число FF? Распишем его по известному нам правилу. Вместо десятки подставим 16, а шестнадцатеричную цифру F заменим соответствующим ей десятичным числом 15. Итак: FF = F×161 + F×160 = 15×161 + 15×160 = 15×16 + 15 = 255.
Попробуем с другим числом, например, 1F5: 1F5 = 1×162 + F×161 + 5×160 = 162 + 15×16 + 5 = 501.
Подобная запись является правилом перевода шестнадцатеричных чисел в привычные нам десятичные. А можно ли десятичное число перевести в шестнадцатеричное? Конечно, да. Но, чтобы избежать путаницы, будем десятичные числа писать как прежде, а перед шестнадцатеричными числами будем ставить префикс «0x», что повсеместно принято для записи таких чисел в компьютере.
Как перевести десятичное число в шестнадцатеричное?
Чтобы перевести десятичное число в шестнадцатеричное, необходимо выполнить следующие действия:
- Проверяем, не меньше ли 16 наше число: если да, то результат достигнут. Действительно, такое десятичное число необходимо лишь заменить соответствующей ему шестнадцатеричной цифрой из таблицы 1. Если же наше десятичное число больше 16, переходим к шагу 2.
- Делим наше число НАЦЕЛО на 16 и запоминаем целочисленный остаток от этого деления. Результат этого деления снова сравниваем с 16. Если результат деления меньше 16, то его стоит тоже запомнить как последний из остатков.
- Шаг 2 повторяем до тех пор, пока результат деления не будет меньше 16. Целочисленные остатки на всех этапах запоминаем. Они понадобятся в шаге 4.
- Все остатки записываем в обратном порядке и заменяем в них числа от 10 до 15 шестнадцатеричными цифрами от a до f.
Проиллюстрируем эти правила примером.
Переведем десятичное число 89 в шестнадцатеричное. Оно больше 16, поэтому разделим его на 16. Частное равно 5 и 9 в остатке. 5 меньше 16, значит, деление прекращается и 5 запомним как последний остаток. То есть у нас есть два остатка: 9 и 5. Теперь их надо записать в обратном порядке, получаем: 89 = 0×59.
Проверим, действительно ли 0×59 равно 89? Распишем его по привычной уже схеме: 0×59 = 5×161 + 9×160 = 5×16 + 9 = 89.
Действительно, получилось. Но в выбранном мной примере число 89 очень быстро закончилось, если так можно сказать. В противном случае деление потребовалось бы продолжить. Покажем это на более сложном примере. Возьмем число 3728: 3728 / 16 = 233 и 0 в остатке. Затем 233 / 16 = 14 и 9 в остатке. Результат этого деления равен 14, он меньше 16. Деление заканчиваем и запоминаем этот результат деления как последний остаток. Нам осталось лишь записать эти остатки в обратном порядке и заменить десятичное число 14 на шестнадцатеричную цифру E. Итак, искомое число 0xE90.
В качестве домашнего задания можете перевести это число в десятичное и проверить, действительно ли 0xE90 равно 3728?
На этом месте статья заканчивалась, я решил ее несколько дополнить. Продолжаем.
Сложение шестнадцатеричных чисел
Сначала немного поговорим о правилах. Самое первое — всегда стоит помнить о том, что шестнадцатеричная система счисления позиционная. Об этом я писал в самом начале, но не грех и повторить. Просто из этого правила следует очень важный момент, складывая числа, нужно делать это только с цифрами, находящимися в одинаковых разрядах.
Сначала мы с вами вспомним как складывать числа в столбик в привычной нам десятичной системе счисления и применим эти знания на шестнадцатеричные числа. Всего делов-то! 🙂
Предположим, нам необходимо сложить числа 234 и 49. Для этого мы запишем эти числа одно под другим так, чтобы разряды в них совпадали — единицы под единицами, десятки под десятками и так далее. И складывать будем цифры из одинаковых разрядов, начиная с единиц и идя влево.
Помня о том, что мы пока складываем десятичные числа (10 является основанием системы счисления), складываем разряды по очереди справа налево. 4 + 9 = 13. Наш результат — 13, он больше 10 — нашего основания. В случае, когда результат больше или равен основанию, это самое основание нужно вычесть из результата. В нашем примере от 13 необходимо отнять 10, а новый результат записать под цифрами 4 и 9, отнятую же здесь десятку, перенести в левый разряд как единицу старшего разряда (десять единиц равно одному десятку). В разряде с десятков мы складываем 3 + 4 и добавляем к ним перенесенный 1 десяток. Результат — 8. Он меньше нашего основания, значит под десятками просто записываем 8. Далее складываем сотни. Но двойку не с чем складывать, значит просто переносим ее в результат. Итак: 234 + 49 = 283.
Ровно те же правила сложения чисел действуют в любой позиционной системе счисления. Единственное отличие заключается в том, что результаты сложения цифр в разрядах придется сравнивать с другими основаниями систем счисления.
Переходим к шестнадцатеричным числам. Вспомним, что основание здесь равно 16. И неприятной особенностью являются цифры обозначенные буквами латинского алфавита. Чтобы нам было проще складывать, вспомним, чему они равны:
a = 10, b = 11, c = 12, d = 13, e = 14, f = 15.
Переходим собственно к примеру на сложение. Давайте сложим 0xA15 и 0xBC.
Сначала складываем единицы — 5 + С. Вспоминаем, что с = 12, получаем 5 + 12 = 17. Результат больше основания системы счисления, который равен 16. Значит вычитаем 16 из 17 — равно 1, записываем этот новый результат под правым разрядом, а в левый старший разряд переносим единичку (16 единиц равно одному десятку в шестнадцатеричной системе). Там же складываем 1 + B. Добавляем к этой сумме 1 перенесенный разряд и вспоминаем, что B = 11, получаем: 1 + 1 + 11 = 13. Во-первых: этот результат меньше 16, значит его можно просто записать под складываемыми цифрами, а во-вторых: Число 13 в шестнадцатеричной арифметике записывается буквой D. В разряд сотен при этом ничего не переносится, а цифра A из верхнего слагаемого просто переносится в результат. Несложно заметить, что 0xA15 + 0xBC = 0xAD1.
Вычитание шестнадцатеричных чисел
Начнем мы снова с привычной нам десятичной системы счисления. Давайте решим пример: 123-85.
Вычитание снова происходит поразрядно, но переносы делаются на сей раз слева направо. Поясню. В нашем примере необходимо из 3 отнять 5. Этого сделать нельзя, поэтому мы занимаем один десяток из левого разряда. Теперь 5 нужно отнять от 13. В результате мы получим 8, запишем этот результат под разрядом единиц. От десятков в уменьшаемом (число 123) мы один десяток заняли в разряд единиц. Теперь здесь только 1 десяток. Нам нужно из одного вычесть 8. Для этого снова приходится занять единицу из левого разряда (теперь уже сотен). Значит нужно из 11 вычесть 8. В результате получаем – 3 и записываем его под разрядом десятков. А единственную сотню мы заняли для вычитания десятков. Пример решён: 123-85 = 38.
Перейдем к вычитанию шестнадцатеричных чисел. Все делается аналогично, надо только помнить, что в случае необходимости из левых разрядов мы будем занимать не 10, а 16. Ну и снова вспомним, чему равны цифры старше девятки:
a = 10, b = 11, c = 12, d = 13, e = 14, f = 15.
Давайте решим пример 0xBC4-0xAF.
Из 4 нельзя вычесть F, значит из левого разряда мы займем 16. Теперь F надо вычитать из 20. В результате — 5, записываем его под разрядом единиц. Цифра C уменьшилась на 1, теперь это B. Значит надо A вычесть из B. Нетрудно догадаться, что в результате будет 1. Записываем этот результат в разряде десятков. Из сотен в этот раз мы ничего не занимали и в вычитаемом только 2 цифры — сотен нет, то есть сносим B из уменьшаемого в результат. Итак: 0xBC4-0xAF = 0xB15, пример решен. Было ли сложно? 🙂