среда, 10 октября 2012 г.

О системах счисления и единицах измерения

Пожалуй, самой распространённой системой счисления является десятичная. Считается, что основание 10 происходит от количества пальцев на руках человека. Состоит из так называемых арабских цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 и является позиционной, то есть вес цифры в числе зависит от её местоположения. Например, в числе 512 "пятёрка" находится в старшем разряде и означает "пять сотен", "единица" указывает на "один десяток", ну а "двойка" в младшем разряде и есть "двойка". Если из этих же цифр сложить иное число, скажем, 125, то и значение его будет другим. Впрочем, целью статьи не является строгое математическое описание систем счисления.

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

Двоичная система счисления или система счисления с основанием 2 состоит всего из двух цифр: 0 и 1. "Двойка" в такой системе записывается как 10, "тройка" - как 11 и так далее. Каждый разряд в записи имеет вес соответствующей степени двойки:

20 = 1
21 = 2
22 = 4
23 = 8
24 = 16 и т.д.

что позволяет преобразовывать двоичную нотацию в более привычную десятичную путём сложения результатов умножения цифры разряда с соответствующим множителем:

110112 = 1x24 + 1x23 + 0x22 + 1x21 + 1x20 = 16+8+0+2+1 = 2710

Обратное преобразование осуществляется постепенным делением заданного десятичного числа на 2 с записью остатков от деления в обратной последовательности:

13 / 2 = 6, остаток 1
6 / 2 = 3, остаток 0
3 / 2 = 1, остаток 1
1 / 2 = 0, остаток 1
итого 1310 = 11012.

Восьмеричная система счисления имеет основанием число 8, в которой цифры обозначаются от 0 до 7. Правила преобразования в и из десятичной системы аналогичны описанным выше для двоичной системы с поправкой на основание. Перевод в и из двоичной системы - более лёгкий процесс, так как в один восьмеричный разряд укладывается как раз три двоичных, что позволяет составить простейшую справочную таблицу для перевода. Ранее восьмеричная система счисления широко применялась в программировании, однако позже была практически вытеснена шестнадцатеричной, оставив упоминания о себе лишь в редких случаях, например, в обозначении прав доступа в системах UNIX.

Шестнадцатеричная система счисления с основанием 16 является, пожалуй, самой сложной из перечисленных с точки зрения восприятия человеком и преобразования в и из привычной десятичной системы. Помимо цифр от 0 до 9 для обозначения цифр от 10 до 15 используются латинские буквы A, B, C, D, E, F. Для перевода из шестнадцатеричной системы в десятичную и наоборот применяется аналогичный алгоритм, как и описанный выше. С двоичной системой опять всё проще, так как один шестнадцатеричный разряд составляет четыре двоичных. Область применения данной системы счисления - программирование и документация, средний пользователь сталкивается с ней разве что в виде обозначения адресов IPv6.

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

010 = 02 = 08 = 016
110 = 12 = 18 = 116
210 = 102 = 28 = 216
310 = 112 = 38 = 316
410 = 1002 = 48 = 416
510 = 1012 = 58 = 516
610 = 1102 = 68 = 616
710 = 1112 = 78 = 716
810 = 10002 = 108 = 816
910 = 10012 = 118 = 916
1010 = 10102 = 128 = A16
1110 = 10112 = 138 = B16
1210 = 11002 = 148 = C16
1310 = 11012 = 158 = D16
1410 = 11102 = 168 = E16
1510 = 11112 = 178 = F16


Исторически использование двоичной системы в цифровой технике уходит корнями в 30-е годы XX века, когда для счётных машин применялись реле и переключатели с двумя положениями, фактически "включено" и "выключено", что отлично укладывалось в двоичные разряды, где "ноль" обозначал "выключено", а "единица" - "включено". А труды Готфрида Лейбница, в XVII веке подробно описавшего двоичную арифметику, и Джорджа Буля, разработавшем в XIX веке булеву алгебру, явились тем краеугольным камнем, на котором и основывались счётные машины и, по сути, вся современная техника.

В 1948 году Клодом Шэнноном было предложено использовать для обозначения двоичного разряда слово бит (bit от binary digit). Именно бит представляет собой наименьшую единицу информации, все остальные фактически являются производными.

Ниббл, именуемый также тетрадой или полубайтом, состоит из четырёх двоичных разрядов, что даёт 16 различных значений, легко обозначаемых одной шестнадцатеричной цифрой. На практике в документации или иных источниках встречается редко.

Гораздо более известной единицей информации наряду с битом является байт (byte от binary term). В современной вычислительной технике байт содержит восемь двоичных разрядов и может принимать 256 различных значений. Стоит отметить, что исторически использовались байты и других размерностей, например, 6-битный байт в машинах PDP-10. Поэтому для восьмибитных байтов существует также более строгое и верное название октет, широко применяемое в сетевых протоколах.

Два и более байт могут составлять слово (word), размер которого зависит от платформы и как правило зависит от разрядности регистров процессора или шины данных. Порядок байтов в слове также может быть разным: от старшего к младшему (big-endian), применяемый, в частности, в сетевых протоколах, или от младшего к старшему (little-endian), наиболее распространённый в архитектуре x86.

На протяжении нескольких десятилетий для обозначения больших объёмов информации использовались приставки СИ для кратных величин: килобайт (равный 210 или 1024 байт), мегабайт (равный 220 байт или 1024 килобайт) и так далее. Однако, если строго следовать букве стандарта, то выясняется, что подобное использование приставок некорректно, так как приставка "кило-" означает 103 или 1000 байт, приставка "мега-" - 106 или 1000000 байт и тому подобное. В результате во избежание этой путаницы в конце 90-х годов XX века Международной электротехнической комиссией (МЭК) были предложены, а в конце 2000-х годов институтом IEEE установлены стандартом новые приставки, основанные на приставках СИ, в которых вторая часть названия заменена на слог "-би". Таким образом появились "кибибайты", "мебибайты", "гибибайты" и прочие "-бибайты". Отечественный ГОСТ, однако, отдаёт предпочтение "некорректным" наименованиям и основывается на степенях двойки. Следующая небольшая табличка представлена для сравнения названий:

ГОСТ 8.417-2002:
байт (Б) = 20 = 1 байт
килобайт (КБ) = 210 = 1024 байта
мегабайт (МБ) = 220 = 1048576 байт
гигабайт (ГБ) = 230 = 1073741824 байта

Приставки СИ:
байт (B, Б) = 100 = 1 байт
килобайт (KB, КБ) = 103 = 1000 байт
мегабайт (MB, МБ) = 106 = 1000000 байт
гигабайт (GB, ГБ) = 109 = 1000000000 байт

Приставки МЭК:
байт (B, Б) = 20 = 1 байт
кибибайт (KiB, КиБ) = 210 = 1024 байта
мебибайт (MiB, МиБ) = 220 = 1048576 байт
гибибайт (GiB, ГиБ) = 230 = 1073741824 байта

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

Тем не менее производители жёстких дисков сумели воспользоваться неразберихой с пользой для себя, указывая на своих продуктах гигабайты и терабайты в системе СИ, в то время как большинство операционных систем до сих пор оперируют теми же гигабайтами и терабайтами в их старых значениях степеней двойки, тех, что нынче правильно называть гибибайтами и тебибайтами. Однако, пользователи-то в основном привыкли также к старым названиям. Поэтому у них зачастую возникает недоумение, почему это их только что купленный жёсткий диск объёмом 3 терабайта в операционной системе представлен как диск объёмом 2,7 терабайта, и куда нехороший производитель задевал недостающие 300 гигабайт.

Комментариев нет:

Отправить комментарий