Три системы счисления: HEX, DEC, BIN должны быть готовы для кодера

Компьютеры

Три системы счисления.

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

Машина «думает» байтами. Байт состоит из 8 бит. Бит может содержать одно значение: 0 или 1. Так что в принципе не плохо иметь представление о восьмеричной системе счисления, но машинный код отображается в различных редакторах как шестнадцатеричное значение — так удобнее для восприятия , поэтому мы обязательно остановимся на трех системах счисления, необходимых программисту.

Зачем нужна двоичная система

Двоичная система выглядит очень необычно и числа, записанные в ней, огромны. Зачем она вообще нужна? Разве компьютеры не могут работать с десятичной системой, к которой мы привыкли?

Оказывается, раньше они так и делали. Самый первый компьютер ENIAC, разработанный в 1945 году, хранил числа в десятичной системе счисления. Для хранения одной цифры использовалась схема, называемая кольцевым регистром; он состоял из десяти радиоламп.

Для записи всех чисел до миллиона — от 0 до 999 999 — нужно шесть цифр, а значит, для хранения таких чисел нужно целых 60 ламп.

Ringregister

Инженеры заметили, что если бы они кодировали числа в двоичном формате, то для хранения таких же больших чисел им понадобилось бы всего двадцать радиоламп — треть этого количества!

Первым преимуществом двоичных чисел является простота схем. Второе, и не менее важное, это производительность. Сложение чисел, хранящихся в кольцевом регистре, требует до десяти циклов процессора на операцию. Сложение двоичных чисел можно выполнить за один такт — то есть в десять раз быстрее.

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

При разработке программы довольно сложно столкнуться с двоичной записью: в подавляющем большинстве случаев компьютер сам преобразует двоичные числа в десятичные и наоборот. Можно долго писать код, даже не подозревая, что данные хранятся внутри компьютера особым образом.

Зачем изучать двоичную систему, если за нас все делает компьютер? Иногда программистам приходится писать программы, работающие напрямую с оборудованием. Например, разработчикам игр необходимо знать, как работают видеокарты, чтобы сделать компьютерную графику быстрее. И разработчики операционных систем понимают, как диски предназначены для безопасного хранения данных.

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

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

Двоичная система счисления — основа мироздания.

Помните даосский символ Инь и Ян? Он состоит из двух цветов, двух понятий: черного и белого, мужского и женского, единицы и нуля. Согласно даосской философии, весь мир формируется именно с помощью двух противоположностей и в то же время неразделимые понятия. Гениальность древних мудрецов просто поразительна. С помощью единиц и нулей человек создает множество цифровых миров. С каждым годом они становятся все более реалистичными.

Основание позиционной системы счисления

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

  • Десятичная система счисления (10сс) использует 10 цифр — от 0 до 9, мы с ней знакомы с детства.
  • Компьютеру больше знакома двоичная система счисления (2сс), в которой используются 2 цифры — 1 и 0.
  •  В двенадцатеричной системе счисления (12cc) помимо цифр 0–9 требуются два дополнительных символа. Для простоты заменим их буквами: A = 10, B = 11. Теперь у нас 12 символов от 0 до B.
  • Кроме того, печально известная система счисления — шестнадцатеричная. Для нее помимо цифр 0-9 нужно еще больше символов для обозначения всех цифр. Происходит это аналогично — каждая новая буква отвечает за большее значение: А = 10, В = 11, С = 12, D = 13, Е = 14, F = 15.
Когда 10 не равно 10?
Мы используем числа, когда у нас заканчиваются числа. Привычная нам система счисления называется десятичной, потому что в ней используется 10 цифр — от 0 до 9. Чтобы записать значения больше 9, мы начинаем строить числа из цифр. Первое число 10.
Если бы мы использовали другое количество цифр, все выглядело бы иначе. При использовании чисел от 0 до 6 мы уже должны строить числа для записи значений больше 6. В этом случае 10 будет равно 7, но эти значения будут записаны с использованием разных систем счисления.

Построение числа в непривычных для нас системах счисления происходит точно так же, как и в 10сс:

  1. Мы увеличиваем значения единиц, используя доступные числа.
  2. Как только цифры заканчиваются, стоимость единиц обнуляется. Появляется новая разрядная цифра, которая также увеличивается от 1 до предела системы счисления.
  3. Когда любой цифре в числе присваивается значение максимальной цифры, цифра выше увеличивается на 1, а текущая цифра сбрасывается до нуля.

Например:

  • В 10сс число 88 будет увеличиваться так:

88 → 89 → 90 → 91 → 92 → … 99 → 100;

  • В 2cc цифры будут появляться быстрее из-за малого количества цифр:

1 → 10 → 11 → 100 → 101 → 110 → 111 → 1000;

  • В 12сс чуть медленнее, так как цифр больше:

8 → 9 → А → В → 10 → 11 → … 18 → 19 → 1А → 1В → 20 → … 99 → 9А → 9В → А0 → А1 → … АА → АВ → В0 → В1 → … ВА → ВВ.

Арифметика, как и построение числа, одинакова во всех системах счисления:

  • Изменение цифр происходит от единиц.
  • При сложении превышение суммы увеличивает цифру выше (то есть «пишем в уме 6, 1”).
  • При вычитании, если необходимо, берем значение со старшего разряда и уменьшаем его на 1.

Десятичная система счисления.

Двоичная система счисления заканчивается всего двумя цифрами: Единица и Зеро (Инь и Ян). Наша обычная система счисления десятичная. Если все числа до десяти состоят из разных одиночных символов (от нуля до девяти), то десятка уже показывается двумя символами — единицей и нулем, поставленными в определенном порядке (10 — единица перед нулем).

Перевод между системами счисления на Python

Ручной перевод больших чисел между системами счисления нецелесообразен и может занять много времени. Иногда выгоднее будет написать программу.

Перевод с 10cc на другие будет осуществляться по описанному выше алгоритму. Пока исходное число больше 0, вы делите его на основное число в системе счисления. Оставшуюся часть деления записываем как новую цифру в числе. Искомое число — это остаток от деления, записанный в обратном порядке.

  1. Основным циклом программы будет while, который выполняется до тех пор, пока исходное число больше 0.
  2. Мы берем новую цифру в числе как остаток от деления исходного числа на основание новой системы счисления с использованием оператора %. Новые цифры будем писать с новой строки, где и будет храниться нужная запись. Чтобы не переворачивать число в конце, мы можем сразу вставлять каждую новую цифру не в конец, а в начало строки.
  3. Уменьшаем само число, разделив его на основание с помощью оператора //.

Например, преобразование числа 258936 в 5cc.

class=»wp-block-separator is-style-wide»> number = 258936 n = 5 new_number = «» while number > 0: d = number % n new_number = str(d) + new_number number //= n print(новый_номер) Вывод: 31241221

Переведем в 10сс из других систем счисления по формуле, описанной выше:

a1a2a3…ai…ak = a1 * nk — 1 + a2 * nk — 2 +… + ai * nk — i +… + ak * n0.

  1. Основной цикл в программе for. Он будет перебирать цифры исходного числа, а точнее их индексы, используя диапазон по длине исходного числа.
  2. На каждом шаге цикла цифра ai числа будет умножаться на основание числа системы счисления этого числа n в степени, равной разности между длиной числа k и порядковым номером текущей цифры я — а*нк — я. Не забывайте, что индексация строки начинается с 0, а не с 1, поэтому порядковый номер цифры на 1 больше, чем индекс.

Например, давайте преобразуем число 31241221 из 5cc обратно в 10cc.

class=»wp-block-separator is-style-wide»> number = «31241221» n = 5 new_number = 0 k = len(number) для ii range(k): new_number += int(numberi) * n ** (k — i — 1) print(new_number) Вывод: 258936 class=»wp-block-separator is-style-wide»>

Лайфхаки для перевода между системами счисления с программой:

  • для преобразования числа из 10cc в 2cc, 8cc и 16cc есть встроенные команды: bin, oct и hex соответственно
    • корзина (123) — «0b1111011”
    • окт(123) — «0o173”
    • шестнадцатеричный (123) — «0x7b”

Важно отметить, что первые два символа ввода номера будут в нашем случае избыточными — они будут обозначать идентификатор той системы счисления, в которую мы преобразовали число.

Чтобы избавиться от него сразу, при переводе можно использовать срез, учитывающий целое число без этого идентификатора:

  • бин(123)2: — «1111011”
  • окт(123)2: — «173”
  • шестнадцатеричный (123) 2: — «7b”
  • вы можете преобразовать число из любой системы счисления в 10cc с помощью команды int. Он должен передавать два параметра: исходное число в виде строки и основание системы счисления:
    • интервал(«31241221», 5) — 258936
    • интервал(«7b», 16) — 123

Восьмеричная система счисления

Восьмеричная система когда-то использовалась наряду с шестнадцатеричной. Из названия видно, что в нем используется всего восемь цифр: 0, 1, 2, 3, 4, 5, 6 и 7. Восьмеричная система подходит для представления шести-, девяти- и двенадцатизначных двоичных чисел.

Такие цифры редкость. Один из самых известных примеров использования восьмеричных чисел — разрешения в операционной системе UNIX. Они записываются в виде девятизначного двоичного числа, например 110100100 или 111101100. Запоминать и передавать такие числа неудобно, поэтому программисты предпочитают восьмеричную систему счисления, записывая права доступа в виде 644 или 754.

Популярные операционные системы Linux и MacOS берут свое начало в UNIX, поэтому и там разрешения задаются в восьмеричном формате.

stat og chmod

Пользователи UNIX используют команду stat, чтобы узнать разрешения, и команду chmod, чтобы изменить их. На рисунке видно, что команды stat и chmod используют восьмеричные числа. Подробное описание этих команд выходит за рамки данной статьи. Вы можете узнать больше о разрешениях и о том, что означают эти числа, взглянув на командную строку Linux.

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

Шестнадцатеричная система счисления.

В шестнадцатеричной системе счисления числа от нуля до шестнадцати отображаются одним символом. Чтобы не составлять новых цифросочетаний, решили использовать буквы латинского алфавита: A, B, C, D, E, F.

Для большей наглядности ниже представлена ​​таблица соответствия чисел трем системам счисления.

dEC BIN HEX Desimal Binær Heksadesimal 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 10 1 0 1 0 1 0 1 0

12345678910111213141516171819202122 DEC BIN HEXDesimal binær heks0001112102311341004510156110671117810008910019101010A111011B121100C131101D1411010101010101010101010101010101010101010101010101010101010101010101010101010101010101010

Det er ikke nødvendig å huske korrespondansen mellom tall. Windows av enhver versjon inkluderer et program «kalkulator» — calc.exe. Kjør den, bytt til programmerervisning (Vis->Programmer eller Alt+3) og la kraften være med deg!

Tre tallsystemer - HEX, DEC, BIN.

Читайте также: Чем заменить YouTube: 8 достойных аналогов видеохостинга

Оцените статью
Блог про кнопки