Системы счисления | Hexlet Guides
В этом гайде разберемся, что такое системы счисления, для чего программисты используют непривычные способы для записи чисел и как их понимать.
- Что такое системы счисления
- От десятичных чисел к двоичным
- Зачем нужна двоичная система
- Как переводить двоичные числа в десятичные
- Как переводить десятичные числа в двоичные
- Шестнадцатеричная система счисления
- Восьмеричная система счисления
- Конвертация чисел в программах
- Сервисы для перевода из системы в систему
- Заключение
Что такое системы счисления
С давних пор людям нужно было записывать числа. В торговле числа нужны, чтобы знать, сколько товаров есть на складе и сколько денег принесла сделка. Записи о положении небесных тел помогли шумерам составить первый календарь, а календарь, в свою очередь, пригодился, чтобы заранее готовиться к посевным и сбору урожая. Строительные сметы, переписи населения, распределение наследства — числа оказались очень востребованными даже в самых древних государствах.
Так что люди научились записывать числа в незапамятные времена. Небольшие числа легко записывались зарубками или насечками, но если в числе несколько знаков, требуется иная система записи. Эту проблему в разных странах решали по-разному.
Сейчас разные способы записи чисел называются системами счисления.
Систем счисления было придумано довольно много, и даже в наши дни мы используем две системы, возникшие в далёкой древности. Из Древнего Рима к нам пришла римская система счисления, где цифры обозначаются буквами латинского алфавита. За основу римляне взяли количество пальцев на одной руке — 5, и на двух руках — 10. Числа 1, 5 и 10 в римской системе обозначаются буквами I, V и X, и с помощью них можно записать любое число от 1 до 49. Например, VII это 7, а XIX — 19.
От Древних Шумеров мы научились делить дроби на шестьдесят частей. Именно из-за них в нашем часе 60 минут, а в минуте 60 секунд. Шумерская система счисления так и называется — шестидесятеричная. Но, конечно, наиболее привычной выглядит численная запись в системе, которую придумали в Древней Индии. Сейчас ее называют арабской или десятичной системой счисления.
От десятичных чисел к двоичным
Разберемся, как устроена десятичная система, на примере произвольного большого числа.
Это четырехзначное число, потому что оно состоит из четырёх цифр. И, поскольку речь идёт о десятичной системе, мы можем использовать десять различных цифр.
Величина, которая скрывается за каждой цифрой, зависит от её позиции, поэтому такую систему счисления называют также и позиционной. Справа мы записываем самые младшие значения — единицы, слева от них десятки, затем сотни, и так далее. Запись 1702 означает буквально следующее.
Цифры, записанные в соседних позициях, различаются в десять раз — это и есть десятичная система. Однако, как мы говорили ранее, привычная нам десятичная система — далеко не единственная. Однако, опираясь на неё, нам будет проще понять принципы работы других систем счисления. Например, для записи того же самого числа 1702 в двоичной системе надо придерживаться тех же правил, но вместо десяти цифр нам потребуется всего две — 0 и 1.
Цифры, записанные в соседних позициях, будут различаться не в десять раз, а в два. То есть там, где в десятичной системе мы видим 1, 10, 100, 1 000, 10 000, в двоичной будут числа 1, 2, 4, 8, 16 и так далее.
Это очень большое двоичное число. Давайте запишем его в привычной форме:
Это число могло бы быть очень большим десятичным числом, потому что состоит из тех же цифр. Чтобы отличать двоичные числа от десятичных, в качестве индекса у них указывают основание системы счисления, то есть 2.
Это особенно важно, когда в тексте одновременно встречаются десятичные и двоичные числа.
Зачем нужна двоичная система
Двоичная система выглядит очень непривычно и числа, записанные в ней, получаются огромными. Зачем она вообще нужна? Разве компьютеры не могут работать с привычной нам десятичной системой?
Оказывается, когда-то они именно так и работали. Самый первый компьютер ENIAC, разработанный в 1945 году, хранил числа в десятичной системе счисления. Для хранения одной цифры применялась схема, которая называется кольцевым регистром, она состояла из десяти радиоламп.
Чтобы записать все числа до миллиона — от 0 до 999 999 — надо шесть цифр, значит, для хранения таких чисел нужно целых 60 ламп.
Инженеры заметили, что если бы они кодировали числа в двоичной системе, то для хранения таких же больших чисел им бы потребовалось всего двадцать радиоламп — в три раза меньше!
Первое преимущество двоичных чисел — простота схем. Второе, и не менее важное — быстродействие. Сложение чисел, хранящихся в кольцевом регистре, требует до десяти тактов процессора на каждую операцию. Сложение двоичных чисел можно выполнить за один такт — то есть в десять раз быстрее.
Группа инженеров, создавших первый компьютер, в 1946 году опубликовала статью, где обосновала преимущество двоичной системы для представления чисел в компьютерах. Первой среди авторов была указана фамилия американского математика Джона фон Неймана. Поэтому сейчас принципы проектирования компьютеров называются архитектурой фон Неймана, хотя это не совсем справедливо по отношению к другим изобретателям компьютера.
При разработке программы с двоичной записью столкнуться довольно сложно: компьютер в подавляющем большинстве случаев сам переводит двоичные числа в десятичные и обратно. Можно долго писать код, даже не подозревая, что внутри компьютера данные хранятся каким-то особым образом.
Зачем изучать двоичную систему, если компьютер делает всю работу за нас? Иногда программистам приходится писать программы, которые работают напрямую с оборудованием. Например, разработчики игр должны знать, как работают видеокарты, чтобы сделать компьютерную графику быстрее. А разработчики операционных систем понимают, как устроены диски, чтобы надежно хранить данные.
Программы, которые работают с железом напрямую, называются системными или низкоуровневыми. Для их создания разработчик должен понимать, как устроен компьютер. Поэтому изучение систем счисления позволяет программисту расширить свой профессиональный диапазон и стать специалистом широкого профиля.
Поэтому для того, чтобы писать сложные системные программы, нужно понимать, как устроена двоичная система счисления.
Как переводить двоичные числа в десятичные
Разберемся, как быстро переводить двоичные числа в десятичные. Для примера потребуется достаточно большое двоичное число, чтобы мы не могли вычислить его на пальцах.
Запишем его в математической записи, помня, что вместо основания 10, мы используем основание 2.
Из этого примера видно, что у всех слагаемых только два множителя — 0 и 1. Слагаемые с множителем 0 равны нулю, поэтому их можно отбросить, оставив только слагаемые с множителем 1.
У слагаемых с множителем 1 этот множитель можно не записывать.
Теперь нетрудно посчитать сумму.
Вывод: число 11010 в двоичной записи — то же самое, что 26 в десятичной.
Ещё раз повторим, как перевести двоичное число в десятичное.
- Записать число в математическом виде
- Отбросить слагаемые с множителем 0
- Сложить результат
Программисты иногда запоминают некоторые степени числа два, чтобы уметь оценивать порядок двоичных чисел. Вы можете подглядывать в эту таблицу:
Двоичное число | Степень 2 | Десятичное число |
---|---|---|
12 | 20 | 1 |
102 | 21 | 2 |
1002 | 22 | 4 |
10002 | 23 | 8 |
1 00002 | 24 | 16 |
10 00002 | 25 | 32 |
100 00002 | 26 | 64 |
1000 00002 | 27 | 128 |
1 0000 00002 | 28 | 256 |
10 0000 00002 | 29 | |
100 0000 00002 | 210 | 1 024 |
1 0000 0000 0000 00002 | 216 | 65 536 |
1 0000 0000 0000 0000 0000 00002 | 224 | 16 777 216 |
1 0000 0000 0000 0000 0000 0000 0000 00002 | 232 | 4 294 967 296 |
С помощью этой таблицы можно переводить числа из двоичной системы в десятичную практически «в уме».
Как переводить десятичные числа в двоичные
Эта задача похожа на математическую загадку, и её можно встретить на олимпиаде для школьников.
Чтобы научиться её решать, давайте ещё раз посмотрим на первые натуральные числа в двоичной и десятичной записи.
Десятичное число | Двоичное число |
---|---|
1 | 12 |
2 | 102 |
3 | 112 |
4 | 1002 |
5 | 1012 |
6 | 1102 |
7 | 1112 |
8 | 10002 |
9 | 10012 |
Обратим внимание на следующую закономерность: все чётные числа — 2, 4, 6 и 8 — в двоичной записи заканчиваются на 0.
- при делении 4 на 2 остаток 0;
- при делении 5 на 2 остаток 1;
- при делении 6 на 2 остаток 0;
- при делении 9 на 2 остаток 1.
Попробуем перевести десятичное число 26 в двоичную систему. Для этого используем деление уголком на 2.
Если 26 разделить на 2, то в результате получится 13, остаток от деления 0. Продолжаем дальше:
- 13 разделить на 2, в результате получится 6, остаток от деления 1;
- 6 разделить на 2, в результате получится 3, остаток от деления 0;
- 3 разделить на 2, в результате получится 1, остаток от деления 1;
- 1 разделить на 2, в результате получится 0, остаток от деления 1;
Из остатков 1, 1, 0, 1 и 0 складывается нужная нам двоичная запись.
Шестнадцатеричная система счисления
Мы знаем, что компьютер использует числа для представления любой информации. Например, цвета хранятся в виде трёх чисел — яркости красной, зелёной и синей компонентов цвета. На каждый компонент отводится восемь двоичных позиций, поэтому максимальная яркость компонента равна 11111111₂ или 255. Цвет целиком описывается большим 24-х разрядным двоичным числом, например, 11111010 10000000 01110010. Это цвет Salmon из таблицы цветов HTML, он же лососевый цвет.
Старшие восемь позиций отводятся для хранения красного компонента, средние восемь — зелёного, и младшие восемь — синего. Мы видим, что такая запись очень громоздка и неудобна.
Кажется, что цвет удобнее записать как десятичное число 16416882. Хотя оно занимает меньше места, по нему трудно понять, какова яркость каждого компонента.
Чтобы записывать большие двоичные числа, программисты придумали использовать шестнадцатеричную систему счисления:
- В десятичной системе десять цифр, а в шестнадцатеричной — шестнадцать
- В десятичной системе соседние позиции отличаются в десять раз, а в шестнадцатеричной — в шестнадцать раз
Как и в случае с двоичной системой, цифры 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9 заимствуются из десятичной системы. Но в данном случае этих цифр не хватает: нужно ещё шесть. Их в шестнадцатеричной системе принято обозначать первыми буквами английского алфавита:
Основание 16 | Основание 10 | Основание 2 |
---|---|---|
0 | 0 | 0 |
1 | 1 | 1 |
2 | 2 | 10 |
3 | 3 | 11 |
4 | 4 | 100 |
5 | 5 | 101 |
6 | 6 | 110 |
7 | 7 | 111 |
8 | 8 | 1000 |
9 | 9 | 1001 |
A | 10 | 1010 |
B | 11 | 1011 |
C | 1100 | |
D | 13 | 1101 |
E | 14 | 1110 |
F | 15 | 1111 |
Шестнадцатеричная система счисления хороша тем, что группа из четырёх двоичных цифр кодируется одной шестнадцатеричной цифрой. Таким образом, лососевый цвет выглядит как:
В шестнадцатеричной системе счисления он записывается так:
Вначале трудно понять, каков порядок у шестнадцатеричного числа FA. Как и в случае с двоичными числами, программисты обычно помнят порядки круглых шестнадцатеричных чисел. Но можно не запоминать, а подглядывать в эту таблицу:
Шестнадцатеричное число | Десятичное число |
---|---|
1016 | 16 |
2016 | 32 |
3016 | 48 |
4016 | 64 |
5016 | 80 |
6016 | 96 |
7016 | 112 |
8016 | 128 |
9016 | 144 |
A016 | 160 |
B016 | 176 |
C016 | 192 |
D016 | 208 |
E016 | |
F016 | 240 |
10016 | 256 |
100016 | 4 096 |
1 000016 | 65 536 |
10 000016 | 1 048 576 |
100 000016 | 16 777 216 |
1000 000016 | 268 435 456 |
1 0000 000016 | 4 294 967 296 |
Чтобы переводить числа из десятичной системы в шестнадцатеричную и обратно, двоичное представление можно использовать как промежуточное. Часто это самый простой способ: двоичное и шестнадцатеричное представления без труда переводятся друг в друга.
Восьмеричная система счисления
Восьмеричная система когда-то использовалась наравне с шестнадцатеричной. Из названия понятно, что она использует всего восемь цифр: 0, 1, 2, 3, 4, 5, 6 и 7. Восьмеричная система подходит для представления шести-, девяти- и двенадцатиразрядных двоичных чисел.
Такие числа встречаются нечасто. Один из самых известных примеров использования восьмеричных чисел — права доступа в операционной системе UNIX. Они записываются девятизначным двоичным числом, например 110100100 или 111101100. Запоминать и передавать такие числа неудобно, поэтому программисты предпочитают восьмеричную систему счисления, и записывают права доступа в виде 644 или 754.
Популярные операционные системы Linux и MacOS берут своё начало в UNIX, поэтому там права доступа также задаются восьмеричным числом.
Пользователи UNIX используют команду stat, чтобы узнать права доступа, и команду chmod, чтобы изменить их. На рисунке вы видите, что команды stat и chmod используют восьмеричные числа. Подробный рассказ об этих командах выходит за рамки нашей статьи. Узнаете больше о правах доступа, и о том, что означают эти числа, можно изучив командную строку Linux.
Подводя итог, можно сказать, что восьмеричные числа сейчас используются редко. В подавляющем большинстве случаев программисты используют шестнадцатеричную запись.
Конвертация чисел в программах
Языки программирования умеют работать с числами, записанными в разных системах счисления, и переводить их из одной системы в другую. Для примера рассмотрим работу с разными системами счисления на Python и JavaScript.
Python
Чтобы записать в Python двоичное число, добавьте перед ним префикс 0b. Десятичное число 26 можно записать в виде 0b11010. У шестнадцатеричных чисел префикс 0x, а у восьмеричных — 0o.
print(0b11010) # => 26 print(0x1a) # => 26 print(0o32) # => 26
Во всех случаях, чтобы записать число, мы пишем сначала цифру ноль «0», а затем букву, которая определяет систему счисления. Буква «b» — первая в слове binary (двоичный), а буква «o» — в слове octal (восьмеричный). Буква «x» выбивается из общего правила — это третья буква в слове hexadecimal (шестнадцатеричный).
Функции bin()
, hex()
и oct()
преобразуют число в двоичную, шестнадцатеричную и восьмеричную системы.
print(bin(26)) # => '0b11010' print(hex(26)) # => '0x1a' print(oct(26)) # => '0o32'
Благодаря префиксной записи и функциям bin()
, hex()
и oct()
, мы можем преобразовывать числа из любой системы в любую.
print(hex(0o32)) // >= '0x1a'
JavaScript
В JavaScript для представления чисел используются те же самые префиксы, что и в Python. 0b11010, 0x1a и 0o32 — записи числа 26 в двоичной, шестнадцатеричной и восьмеричной системах счисления.
console.log(0b11010) // => 26 console.log(0x1a) // => 26 console.log(0o32) // => 26
Для преобразования чисел в другую систему счисления нужно вызывать метод toString()
, передав в качестве параметра основание системы.
Обычно в JavaScript мы можем вызвать метод у объекта с помощью точки. Например, если мы сохранили число в переменной i
, мы можем узнать его шестнадцатеричное представление, вызвав метод i.toString(16)
. Но мы не можем вызывать метод у числа 2 — 2.toString(16)
— потому что в JavaScript точка в записи чисел разделяет целую и дробную части. Если дробная часть равна нулю, её можно не записывать, поэтому «2.» означает то же самое, что и «2.0».
В примере вы видите три корректных способа обойти эту проблему, и вызвать метод toString()
у числа 26.
console.log((26).toString(2)) // => '11010' console.log(26..toString(16)) // => '1a' console.log(26 .toString(8)) // => '32'
Сервисы для перевода из системы в систему
Существует множество сервисов для перевода чисел из системы в систему. Это умеет даже Google.
Чтобы перевести двоичное число, например, 11010 в десятичную систему, надо ввести запрос 0b11010 decimal.
Чтобы перевести десятичное число, например, 26 в двоичную систему, надо ввести запрос 26 binary.
Обратите внимание, что Google использует префикс 0b, чтобы отличать двоичные числа от десятичных.
Чтобы перевести десятичное число 137 в шестнадцатеричную систему, введите запрос 137 hex.
Чтобы перевести шестнадцатеричное число 2BAD в десятичную систему, введите запрос 0x2BAD decimal.
Google использует префикс 0x для того, чтобы отличать шестнадцатеричные числа от всех прочих. Чтобы перевести число 121 в восьмеричную систему, введите запрос 121 octal.
Чтобы перевести число обратно, введите в строке поиска запрос 0o171 decimal.
Мы видим, что Google для представления чисел в двоичной, шестнадцатеричной и восьмеричной системах счисления использует такие же префиксы, которые мы видели в примерах на Python и JavaScript.
Заключение
Люди изобрели разные способы записывать числа. Мы называем их системами счисления. Привычный для нас способ записи называется десятичной системой счисления.
Компьютеры, которые работали в десятичной системе, оказались сложными и медленными. Хранение чисел в двоичной системе позволило упростить схемы и ускорить работу компьютеров.
Обычно нам не нужно знать, как именно компьютер хранит числа, потому что он умеет переводить их в привычную нам форму. Но если мы хотим разрабатывать программы, которые работают с оборудованием напрямую — системные утилиты или компьютерные игры, — нужно разобраться, как устроены двоичная и шестнадцатеричная системы.
Существует ряд алгоритмов, которые помогают перевести число из одной системы в другую, но они достаточно запутанные. Проще использовать Google.
Двоичная запись чисел очень громоздкая, поэтому программисты предпочитают записывать числа в шестнадцатеричной системе счисления. Восьмеричная запись чисел сейчас используется очень редко.
Вы можете конвертировать числа из системы в систему на своём любимом языке программирования.
Восьмеричная система счисления
Восьмеричная система (система с основанием 8) использовалась для кодирования команд во многих компьютерах 1950-1980-х годов (например, в американской серии PDP-11, советских компьютерах серий ДВК, СМ ЭВМ, БЭСМ). В ней используются цифры от 0 до 7.
Для перевода десятичного числа в восьмеричную проще всего систему использовать стандартный алгоритм для позиционных систем (деление на 8, выписывание остатков в обратном порядке). Например,
рис. 2.26
рис. 2.27
Для перевода из восьмеричной системы в десятичную значение каждой цифры умножают на 8 в степени, равной разряду этой цифры, и полученные произведения складывают:
разряды 2 1 0
1448 = 182 + 481 + 480 = 64 + 48 + 4 = 100.
Более интересен перевод из восьмеричной системы в двоичную и обратно. Конечно, можно перевести число сначала в десятичную систему, а потом – в двоичную. Но для этого требуется выполнить две непростых операции, в каждой из них легко ошибиться.
Оказывается, можно сделать перевод из восьмеричной системы в двоичную напрямую, используя тесную связь между этими системами: их основания связаны равенством 23 = 8. Покажем это на примере восьмеричного числа 7538. Запишем его в развернутой форме:
7538 = 782 + 581 + 380 = 726 + 523 + 320.
Теперь переведем отдельно каждую цифру в двоичную систему:
7 = 1112 = 122 + 121 + 120, 5 = 1012 = 122 + 120,
3 = 112 = 121 + 120.
И подставим эти выражения в предыдущее равенство:
7538 = (122 + 121 + 120)26 + (122 + 120)23 + (121 + 120)20.
Раскрывая скобки, мы получим разложение исходного числа по степеням двойки, то есть его запись в двоичной системе счисления (здесь добавлены нулевые слагаемые для отсутствующих степеней числа 2):
7 538 = 1 28 + 1 27 + 1 26 + 1 25 + 0 24 + 1 23 + 0 22 + 1 21 + 1 20.
0 | 000 |
1 | 001 |
2 | 010 |
3 | 011 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
Т
аким
образом, 7538 = 111 101
0112. Двоичная запись разбита на триады (группы из трех цифр), каждая
триада – это двоичная запись одной
цифры исходного восьмеричного числа.
Алгоритм перевода восьмеричного числа в двоичную систему счисления.
|
Например, 357218 = 11 101 111 010 0012. В этой записи триады специально отделены друг от друга пробелом. Обратите внимание, что все триады дополнены спереди нулями до трех цифр:
2 = 102 = 0102, 1 = 12 = 0012.
Для
самой первой триады это делать не
обязательно, потому что лидирующие нули
в записи числа никак его не меняют. Напротив, если «потерять» нули в середине
числа, получится неверный результат.
Алгоритм перевода двоичного числа в восьмеричную систему счисления.
|
Например, переведем в восьмеричную систему число 10100111001011101112. Разобьем его на триады (начиная справа), к первой триаде нужно добавить два нуля (они подчеркнуты):
10100111001011101112 = 001 010 011 100 101 110 1112
Далее
по таблице (см. выше) переводим каждую
триаду в восьмеричную систему:
10100111001011101112 = 12345678.
Теперь представьте себе объем вычислений, который потребуется для решения этой задачи через десятичную систему.
П
рис. 2.28
ри вычислениях в восьмеричной системе нужно помнить, что максимальная цифра – это 7. Перенос при сложении возникает тогда, когда сумма в очередном разряде получается больше 7. Заем из старшего разряда равен 108 = 8, а все «промежуточные» разряды заполняются цифрой 7 – старшей цифрой системы счисления. Приведем примеры сложения и вычитания:
В примере на сложение запись 18
+ 2 означает, что получилась сумма, большая
7, которая не помещается в один разряд.
Единица идет в перенос, а двойка остается
в этом разряде. При вычитании «– 1»
означает, что из этого разряда раньше
был заем (его значение уменьшилось на
1), а «+ 8» – заем из следующего разряда.
С помощью восьмеричной системы удобно кратко записывать содержимое областей памяти, содержащих, количество бит, кратное трем. Например, 6-битные данные «упаковываются» в две восьмеричные цифры. Некоторые компьютеры 1960-х годов использовали 24-битные и 36-битные данные, они записывались соответственно с помощью 8 и 12 восьмеричных цифр. Восьмеричная система использовалась даже для компьютеров с 8-битным байтом (PDP-11, ДВК), но позднее была почти вытеснена шестнадцатеричной системой (см. далее).
Сейчас восьмеричная система применяется,
например, для установки прав на доступ
к файлу в Linux (и других Unix-системах)
с помощью команды chmod.
Режим доступа кодируется тремя битами,
которые разрешают чтение (r, read, старший бит), запись
(w, write) и выполнение файла
(x, execute, младший бит). Код
7 = 1112 (rwx)
означает, что все биты установлены
(полный доступ), а код 5 = 1012 (r—x)
разрешает чтение и выполнение файла,
но запрещает его изменение.
Восьмеричная система: история, система счисления, преобразования — наука
Видео: Номерные системы Введение — Десятичная, двоичная, восьмиугольная и шестнадцатеричная содержимое- ИСТОРИЯ
- Система октального нумерации
- .
- Преобразование десятичной системы в восьмеричную
- Пример
- Преобразование из октального в бинарное
- Преобразование из двоичного в октальное
- Преобразование с восьмиугольника в шестнадцатеричную и наоборот
- Ссылки

Это так, потому что его основание равно точной степени двойки (2). То есть числа, принадлежащие к восьмеричной системе, образуются, когда они группируются в три последовательные цифры, упорядоченные справа налево, таким образом получая их десятичное значение.
ИсторияВосьмеричная система возникла в древние времена, когда люди использовали руки для счета животных от восьми до восьми.
Например, для подсчета коров в хлеву начинали считать правой рукой, соединяя большой палец с мизинцем; затем для подсчета второго животного большой палец соединяли с указательным и так далее с оставшимися пальцами каждой руки, пока не завершилось число 8. 9.0057
Возможно, что в древности восьмеричная система счисления использовалась до десятичной, чтобы можно было считать межцифровые промежутки; то есть считайте все пальцы, кроме больших.
Позже была установлена восьмеричная система счисления, которая произошла от двоичной системы, потому что для представления только одного числа требуется много цифр; с тех пор были созданы восьмеричная и шестиугольная системы, которые не требуют большого количества цифр и могут быть легко преобразованы в двоичную систему.
Восьмеричная система состоит из восьми цифр от 0 до 7. Они имеют то же значение, что и в случае десятичной системы счисления, но их относительное значение меняется в зависимости от занимаемой ими позиции. Значение каждой позиции определяется степенью основания 8.
Позиции цифр в восьмеричном числе имеют следующие веса: , 8 0 , восьмеричная точка, 8 -1 , 8 -2 , 8 -3 , 8 -4 , 8 -5 .
Самая большая восьмеричная цифра — 7; таким образом, при счете в этой системе позиция цифры увеличивается с 0 до 7. Когда достигается 7, она перерабатывается в 0 для следующего счета; таким образом увеличивается позиция следующей цифры. Например, для подсчета последовательностей в восьмеричной системе это будет:
- 0, 1, 2, 3, 4, 5, 6, 7, 10.
- 53, 54, 55, 56, 57, 60.
- 375, 376, 377, 400.
Существует фундаментальная теорема, которая применяется к восьмеричной системе и выражается следующим образом:
В этом выражении di представляет цифру, умноженную на степень по основанию 8, которое указывает разрядное значение каждой цифры, так же, как оно упорядочено в десятичной системе.
Например, у вас есть номер 543.2. Чтобы привести его к восьмеричной системе, он разлагается следующим образом:
N = ∑ [(5 * 8 2 ) + (4 * 8 1 ) + (3 * 8 0 ) + (2 * ) 8 -4 = 4 + 4 -1 ) (4 * 8) + (2 * 1) + (2 * 0,125)
N = 320 +32 + 2 + 0,25 = 354 + 0,25 d
Таким образом у вас получится 543,2 что = 354,25 д . Нижний индекс q указывает на то, что это восьмеричное число, которое также может быть представлено числом 8; а нижний индекс d относится к десятичному числу, которое также может быть представлено числом 10.
Преобразование восьмеричной системы в десятичнуюЧтобы преобразовать число из восьмеричной системы в его эквивалент в десятичной системе, просто умножьте каждую восьмеричную цифру на ее разряд, начиная справа.
Example 1732 8 = (7 * 8 2 ) + (3 * 8 1 ) + (2 * 8 0 ) = (7 * 64) + (3 * 8) + (2 * 1)
732 8 = 448 +24 +2
732 8 = 474 10
Пример 226,9 8 = (2 *
26,9 . 8 0 ) + (9 * 8 -1 ) = (2 * 8) + (6 * 1) + (9 * 0,125)
26,9 8 = 16 + 6 + 1,125
26,9 8 = 23,125 10
Перевод из десятичной системы в восьмеричнуюДесятичное целое число можно преобразовать в восьмеричное число с помощью метода многократного деления, при котором десятичное целое число делится на 8 до тех пор, пока частное не станет равным 0, а остаток от каждого деления будет представлять восьмеричное число.
Остатки упорядочены от последнего к первому; то есть первый остаток будет младшей значащей цифрой восьмеричного числа. Таким образом, самая значащая цифра будет последним остатком.
ПримерВосьмеричное число 266 10
— Разделите десятичное число 266 на 8 = 266/8 = 33 + остаток от 2.
— Затем разделите 33 на 8 = 33/8 = 4 + остаток от 1.
— Разделить 4 на 8 = 4/8 = 0 + остаток от 4.
Так как при последнем делении получается частное меньше 1, это означает, что результат найден; Вам нужно только упорядочить остатки в обратном порядке таким образом, чтобы восьмеричное десятичное число 266 было равно 412, как показано на следующем изображении:
Преобразование восьмеричного числа в двоичноеПреобразование восьмеричного числа в двоичное выполняется путем преобразования восьмеричного числа в эквивалентное ему двоичное число, состоящее из трех цифр. Существует таблица, которая показывает, как преобразуются восемь возможных цифр:
Из этих преобразований вы можете преобразовать любое число из восьмеричной системы в двоичную, например, чтобы преобразовать число 572 8 , найдите их эквиваленты в стол. Таким образом, вы должны:
5 8 = 101
7 8 = 111
2 8 = 10
Следовательно, 572 8 — эквивалент в бинарной системе до 1011111111111111177 700777777777777777777777777777777777777777777 гг.
Процесс преобразования двоичных целых чисел в восьмеричные числа является обратным предыдущему процессу.
То есть биты двоичного числа группируются в две группы по три бита, начиная справа налево. Затем выполняется преобразование из двоичного в восьмеричное с помощью приведенной выше таблицы.
В некоторых случаях двоичное число не имеет групп по 3 бита; для его завершения слева от первой группы добавляются один или два нуля.
Например, чтобы изменить двоичное число 11010110 на восьмеричное, выполните следующие действия:
— Группы по 3 бита формируются, начиная справа (последний бит):
11010110
— Так как первая группа неполная, добавляется ноль в начале:
011010110
— Преобразование производится из таблицы:
011 = 3
010 = 2
110 = 6
Таким образом, двоичное число 011010110 равно 326 8 .
Преобразование восьмеричного числа в шестнадцатеричное и обратно Чтобы преобразовать восьмеричное число в шестнадцатеричное или из шестнадцатеричного в восьмеричное, необходимо преобразовать число сначала в двоичную, а затем в нужную систему.
Для этого существует таблица, в которой каждая шестнадцатеричная цифра представлена своим эквивалентом в двоичной системе, состоящим из четырех цифр.
В некоторых случаях двоичное число не имеет групп по 4 бита; для его завершения слева от первой группы добавляются один или два нуля. = 1
6 8 = 110
4 8 = 100
6 8 = 110
— Таким образом, 1646 8 = 1110100110.
.0057
— Для преобразования из двоичного в шестнадцатеричный сначала они упорядочиваются в группе из 4 бит, начиная справа налево:
11 1010 0110
— Первая группа дополняется нулями, так что она может иметь 4 бита :
0011 1010 0110
— Произведено преобразование из двоичного в шестнадцатеричное. Эквивалентности заменены таблицей:
0011 = 3
1010 = A
0110 = 6
Таким образом, восьмеричное число 1646 равно 3A6 в шестнадцатеричной системе счисления.
Ссылки- Bressan, A.
E. (1995). Знакомство с системами нумерации. Аргентинский университет компании.
- Харрис, Дж. Н. (1957). Введение в двоичную и восьмеричную системы счисления: Лексингтон, Массачусетс. Агентство технической информации вооруженных сил.
- Кумар, А.А. (2016). Основы цифровых схем. Обучение Pvt.
- Перис, XC (2009). Единые операционные системы.
- Рональд Дж. Точчи, Н. С. (2003). Цифровые системы: принципы и приложения. Пирсон Образование.
языковой агностик — В каких ситуациях используется восьмеричная база?
спросил
Изменено 9 месяцев назад
Просмотрено 21к раз
Я часто встречал двоичные и шестнадцатеричные значения, но никогда не использовал восьмеричные. Тем не менее, восьмеричное число имеет свое собственное соглашение для использования в некоторых языках (например, начальный 0 указывает на восьмеричное основание). Когда используется восьмеричное число? Каковы некоторые типичные ситуации, когда можно было бы использовать восьмеричное или восьмеричное число, о котором было бы легче рассуждать? Или это просто дело вкуса?
- независимо от языка
- восьмеричное
Восьмеричное используется, когда количество битов в одном слове кратно 3, или если группировка битов имеет смысл записывать группами по 3. Примеры:
- древние системы с 18-битными размерами слов (в основном исторические)
- систем с 9-битными байтами (в основном исторические)
- права доступа к файлу unix с 9 битами (3 * 3 бита, «rwxr-x—» 0750)
- разрешений файла unix с 12 битами (такими же, как 9битовая версия, но с добавлением трех битов впереди для setuid, setgid и sticky, 01777, но буквы здесь сложнее)
За 25 лет работы в ИТ я не сталкивался ни с каким использованием восьмеричного числа, кроме битов прав доступа к файлу unix.
Если количество битов в вашем слове кратно 4, однако , пожалуйста, используйте шестнадцатеричный код , во что бы то ни стало.
1
Octal используется в качестве сокращения для представления прав доступа к файлам в системах UNIX. Например, файловый режим rwxr-xr-x
будет 0755
.
4
Octal используется, когда синтаксис является пережитком прошлого, когда он, возможно, имел смысл на какой-то платформе (системные слова не всегда были кратны 8 битам). В настоящее время hex — это то, что нужно использовать.
Не об этом подумал, а о цифровых дисплеях!
Несколько других применений от: http://en.wikipedia.org/wiki/Восьмеричный
Одна из основных причин, по которой восьмеричная система использовалась чаще, заключалась в том, что проще преобразовать восьмеричную в двоичную в уме, чем шестнадцатеричную в двоичную: вам нужно только запомнить двоичное представление 8 восьмеричных цифр (0-7).
В те дни, когда отладка означала чтение содержимого регистров с помощью ряда светодиодов или ввод данных с помощью массива тумблеров, это было большой проблемой. Панели на многих из этих ранних компьютеров сгруппировали светодиоды и переключатели в группы по три, чтобы облегчить это.
Однако шестнадцатеричный формат начал побеждать, поскольку размеры слов, кратные 8-битным байтам, стали побеждать, и необходимость чтения и ввода данных в двоичном виде стала ненужной (с текстовым интерфейсом консоли и более поздними отладчиками графического интерфейса).
Если бы птицы умели считать, я бы предположил, что они используют восьмеричное число. В то время как у большинства птиц на оперенных «руках» 3 пальца, большинство из них тетрадактилии, то есть по 4 пальца на каждой ноге.
1
В авионике метки слов ARINC 429 почти всегда выражаются в восьмеричном формате.
Музыка, пока вы держитесь подальше от (большинства) диезов и бемолей.
2
К вашему сведению, есть несколько мест, где Windows и javascript автоматически решают, что число с префиксом нуля является восьмеричным, и преобразуют число.