Найти в Дзене

Способы записи чисел в разных системах

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

Однако как отличить десятичное число 100 от шестнадцатеричного числа 100? Ведь выглядят они совершенно одинаково, но при этом имеют разные значения.

Изначально было принято указывать систему счисления в нижнем индексе, например:

100(2) - число 100 в двоичной системе (4 в десятичной)

100(8) - число 100 в восьмеричной системе (64 в десятичной)

100(16) - число 100 в шестнадцатеричной системе (256 в десятичной)

ПРИМЕЧАНИЕ: Даже Дзен не позволяет записывать символы в нижнем индексе (или позволяет, но я не знаю как). Поэтому здесь они записан в скобках.

Однако это продолжалось до тех пор, пока программы больше писали на бумаге, чем на компьютерах. Но когда появились простые текстовые редакторы, в которых можно было писать программы, то такая запись стала невозможной (простые редакторы не позволяют писать что-либо в нижнем индексе). Поэтому пришлось придумывать новые способы записи чисел для систем, отличных от десятичной. И придумали - куда деваться…

Сначала, понятное дело, был ассемблер. И в ассемблере придумали записывать числа так:

100 - десятичное число
100b - двоичное число
100o - восьмеричное число
100h - шестнадцатеричное число

То есть в конце числа надо поставить букву, с которой начинается название системы счисления:

b - binary (двоичная)
o - octal (восьмеричная)
h - hexadecimal (шестнадцатеричная)

Причём в ассемблере эти буквы могут быть как большими, так и маленькими.

В С/С++ принято записывать числа по другому:

0x100 - шестнадцатеричное число (256 в десятичной)
0b100 - двоичное число (4 в десятичной)

Ну и из С++ эта форма записи перекочевала во множество других языков. Но, например, в Python таким образом можно записывать и восьмеричное число:

0o100 - восьмеричное число (64 в десятичной, в C++ такое не прокатит)

Ну и есть ещё паскалевская форма записи, которая также работает при программировании микроконтроллеров AVR:

$100 - шестнадцатеричное число

Ну а вообще в современном Паскале есть и другие формы записи чисел, но здесь о них говорить не буду, потому что очень подробно, да ещё и с видео, рассказал об этом ранее.