Шестнадцатеричный

Из Википедии, бесплатной энциклопедии

В математике и вычислительной технике шестнадцатеричная , (также основанная на 16 или просто шестнадцатеричная ) система счисления представляет собой позиционную систему счисления которая представляет числа с использованием системы счисления (основания) шестнадцати. В отличие от десятичной системы, представляющей числа с помощью десяти символов, шестнадцатеричная использует шестнадцать различных символов, чаще всего символы «0» – «9» для обозначения значений от 0 до 9 и «A» – «F» (или «a» – «f»). ) для представления значений от десяти до пятнадцати.

Разработчики программного обеспечения и проектировщики систем широко используют шестнадцатеричные числа, поскольку они обеспечивают удобное для человека представление двоичных значений. Каждая шестнадцатеричная цифра представляет четыре бита (двоичные цифры), также известные как полубайт (или полубайт). [1] Например, 8-битный байт может иметь значения в диапазоне от 00000000 до 11111111 (от 0 до 255 десятичных чисел) в двоичной форме, которую удобно представить как с 00 до FF в шестнадцатеричном формате.

В математике для обозначения основания обычно используется нижний индекс. Например, десятичное значение 15 478 будет выражаться в шестнадцатеричном виде как 3C76 16 . В программировании шестнадцатеричные числа обозначаются несколькими обозначениями, обычно с префиксом. Префикс 0x используется в C , что будет обозначать это значение как 0x3C76.

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

Представительство [ править ]

Письменное заявление [ править ]

В большинстве текущих случаев использования буквы A–F или a–f обозначают значения 10–15, а цифры 0–9 используются для обозначения их десятичных значений.

Не существует универсального соглашения об использовании нижнего или верхнего регистра, поэтому каждый из них преобладает или предпочтителен в определенных средах по стандартам или соглашениям сообщества; используется даже смешанный случай. В некоторых семисегментных дисплеях используется смешанный регистр «A b C d E F», чтобы отличать цифры A – F друг от друга и от 0 до 9.

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

00000000    57   69   6b   69   70   65   64   69    61   2c   20   74   68   65   20   66   
 00000010    72   65   65   20   65   6e   63   79    63   6c   6f   70   65   64   69   61   
 00000020    20   74   68   61   74   20   61   6e    79   6f   6e   65   20   63   61   6e  
 00000030    20   65   64   69   74   0a 

Отличие от десятичной [ править ]

В контекстах, где основание неясно, шестнадцатеричные числа могут быть неоднозначными и их можно спутать с числами, выраженными в других основаниях. Существует несколько соглашений для однозначного выражения ценностей. Числовой индекс (который сам записан в десятичной системе счисления) может явно указывать основание: 159 10 — десятичное число 159; 159 16 — это шестнадцатеричное число 159, что равно 345 10 . Некоторые авторы предпочитают текстовый нижний индекс, например 159 десятичный и 159 шестнадцатеричный или 159 d и 159 h .

Дональд Кнут представил использование определенного шрифта для обозначения определенного основания в своей книге The TeXbook . [2] Шестнадцатеричные представления записаны там шрифтом пишущей машинки : 5А3 , C1F27ED

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

  • Оболочки Unix (и родственные), язык ассемблера AT&T , а также язык программирования C (и его синтаксические потомки, такие как C++ , C# , Go , D , Java , JavaScript , Python и Windows PowerShell ) используют префикс 0x для числовых констант, представленных в шестнадцатеричном формате: 0x5A3, 0xC1F27ED. Символьные и строковые константы могут выражать коды символов в шестнадцатеричном формате с префиксом \x за которым следуют две шестнадцатеричные цифры: '\x1B' представляет управляющий символ Esc ; "\x1B[0m\x1B[25;1H" представляет собой строку, содержащую 11 символов с двумя встроенными символами Esc. [3] Чтобы вывести целое число в шестнадцатеричном виде с помощью семейства функций printf , код преобразования формата %X или %x используется.
  • В XML и XHTML символы могут быть выражены как ссылки на шестнадцатеричные числовые символы с использованием обозначения &#xcode;, например Tпредставляет символ U+0054 (заглавная буква «Т»). Если нет x число десятичное (таким образом T это тот же персонаж). [4]
  • , производных от Intel, В языках ассемблера и Modula-2, [5] Шестнадцатеричное число обозначается суффиксом Ч или ч : FFh или 05A3H. В некоторых реализациях требуется ведущий ноль, когда первый символ шестнадцатеричной цифры не является десятичной цифрой, поэтому можно было бы написать 0FFh вместо FFh. Некоторые другие реализации (например, NASM) позволяют использовать числа в стиле C ( 0x42).
  • Другие языки ассемблера ( 6502 , Motorola ), Pascal , Delphi , некоторые версии BASIC ( Commodore ), GameMaker Language , Godot и Forth используют $ в качестве префикса: $5A3, $C1F27ED.
  • Некоторые языки ассемблера (микрочипы) используют обозначение H'ABCD'(для ABCD 16 ). Аналогично, Фортран 95 использует Z'ABCD'.
  • Ada и VHDL заключают шестнадцатеричные цифры в «числовые кавычки»: 16#5A3#, 16#C1F27ED#. Для констант битовых векторов VHDL использует обозначение x"5A3", x"C1F27ED". [6]
  • Verilog представляет шестнадцатеричные константы в виде 8'hFF, где 8 — количество бит в значении, а FF — шестнадцатеричная константа.
  • и Языки Icon Smalltalk используют префикс 16r: 16r5A3
  • PostScript , оболочка Bourne и ее производные обозначают шестнадцатеричный код с префиксом. 16#: 16#5A3, 16#C1F27ED.
  • Common Lisp использует префиксы #x и #16r. Установка переменных *read-base* [7] и *принт-база* [8] до 16 также можно использовать для переключения считывателя и принтера системы Common Lisp на шестнадцатеричное представление чисел для чтения и печати чисел. Таким образом, шестнадцатеричные числа могут быть представлены без префиксного кода #x или #16r, если база ввода или вывода изменена на 16.
  • MSX БЕЙСИК , [9] QuickBASIC , FreeBASIC и Visual Basic префикс шестнадцатеричных чисел с &H: &H5A3
  • BBC BASIC и Locomotive BASIC Использование & для шестигранника. [10]
  • В сериях TI-89 и 92 используется 0h префикс: 0h5A3, 0hC1F27ED
  • АЛГОЛ 68 использует префикс 16r для обозначения шестнадцатеричных чисел: 16r5a3, 16rC1F27ED. Двоичные, четверичные (с основанием 4) и восьмеричные числа можно указать аналогичным образом.
  • Наиболее распространенный формат шестнадцатеричного числа на мэйнфреймах IBM ( zSeries ) и компьютерах среднего уровня ( IBM i ), работающих под управлением традиционных ОС ( zOS , zVSE , zVM , TPF , IBM i ), — это X'5A3' или X'C1F27ED'и используется в ассемблере, PL/I , COBOL , JCL , сценариях, командах и других местах. Этот формат был распространен и в других (и уже устаревших) системах IBM. Иногда вместо апострофов использовались кавычки.

Синтаксис, который всегда является шестнадцатеричным [ править ]

Иногда известно, что числа шестнадцатеричные.

  • В URI (включая URL-адреса ) коды символов записываются в виде шестнадцатеричных пар с префиксом %: http://www.example.com/name%20with%20spaces где %20 — это код пробела (пустого символа), кодовая точка ASCII: 20 в шестнадцатеричном формате, 32 в десятичном формате.
  • В стандарте Unicode значение символа представляется как U+ за которым следует шестнадцатеричное значение, например U+00A1 перевернутый восклицательный знак (¡).
  • Ссылки на цвета в HTML, CSS и X Window могут быть выражены шестью шестнадцатеричными цифрами (по две для красного, зеленого и синего компонентов в указанном порядке) с префиксом #: пурпурный , например, представлен как #FF00FF. [11] CSS также допускает трехшестнадцатеричные сокращения, по одной шестнадцатеричной цифре на каждый компонент: #FA3 сокращает #FFAA33 (золотой апельсин:  ).
  • В кодировке MIME (расширения электронной почты) с возможностью печати в кавычках коды символов записываются в виде шестнадцатеричных пар с префиксом =: Espa=F1a — «España» ( шестнадцатеричный код F1 — это код ñ в наборе символов ISO/IEC 8859-1). [12] )
  • Двоичные данные PostScript (например, пиксели изображения ) могут быть выражены в виде последовательных шестнадцатеричных пар без префиксов: AA213FD51B3801043FBC ...
  • Любой адрес IPv6 можно записать в виде восьми групп по четыре шестнадцатеричных цифр (иногда называемых шестнадцатеричными ), где каждая группа разделяется двоеточием ( :). Это, например, действительный адрес IPv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334 или сокращенно путем удаления ведущих нулей как 2001:db8:85a3::8a2e:370:7334 ( Адреса IPv4 обычно записываются в десятичном формате).
  • Глобальные уникальные идентификаторы записываются как тридцать две шестнадцатеричные цифры, часто в неравных группах, разделенных дефисом, например 3F2504E0-4F89-41D3-9A0C-0305E82C3301.

Другие символы для 10–15 и в основном разные . наборы символов

Использование букв от A до F для обозначения цифр выше 9 не было универсальным в ранней истории компьютеров.

  • В 1950-х годах некоторые установки, такие как Bendix-14, предпочитали использовать цифры от 0 до 5 с надчеркиванием для обозначения значений 10–15 как 0 , 1 , 2 , 3 , 4 и 5 .
  • СВАК ( 1950 ) [13] и Бендикс G-15 (1956 г.) [14] [13] компьютеры использовали строчные буквы u , v , w , x , y и z для значений от 10 до 15.
  • Компьютеры ORDVAC . и ILLIAC I (1952) (и некоторые производные конструкции, например BRLESC ) использовали заглавные буквы K , S , N , J , F и L для значений от 10 до 15 [15] [13]
  • В Librascope LGP-30 (1956) использовались буквы F , G , J , K , Q и W для значений от 10 до 15. [16] [13]
  • На компьютере PERM (1956) шестнадцатеричные числа записывались в виде букв O для нуля, от A до N и P от 1 до 15. Многие машинные инструкции имели мнемонические шестнадцатеричные коды ( A = сложить, M = умножить, L = загрузить, F =фиксированная точка и т. д.); программы были написаны без имен инструкций. [17]
  • В Honeywell Datamatic D-1000 (1957) использовались строчные буквы b , c , d , e , f и g , тогда как в Elbit использовались прописные буквы B , C , D , E , F и G. 100 (1967) для значений от 10 до 15. [13]
  • Monrobot XI (1960) использовал буквы S , T , U , V , W и X для значений от 10 до 15. [13]
  • Параметронный NEC компьютер NEAC 1103 (1960) использовал буквы D , G , H , J , K (и, возможно, V ) для значений 10–15. [18]
  • Pacific Data Systems 1020 (1964) использовала буквы L , C , A , S , M и D для значений от 10 до 15. [13]
Биби-бинарный
Предложение Брюса Алана Мартина по шестнадцатеричной записи [19]
Предложение Рональда О. Уитакера по шестнадцатеричной записи. [20] [21]
  • В 1972 году Рональд О. Уитакер из Rowco Engineering Co. предложил треугольный шрифт, который позволяет «прямое двоичное чтение», «разрешая как ввод, так и вывод с компьютеров без учета матриц кодирования». [20] [21]
  • Некоторые микросхемы декодирования семисегментного дисплея (например, 74LS47) показывают неожиданный выходной сигнал из-за логики, предназначенной только для правильного вывода 0–9. [22]

Вербальные и цифровые представления [ править ]

Поскольку не существовало традиционных цифр для обозначения величин от десяти до пятнадцати, вместо них были повторно использованы буквы алфавита. В большинстве европейских языков отсутствуют недесятичные слова для некоторых цифр от одиннадцати до пятнадцати. Некоторые люди читают шестнадцатеричные числа по цифрам, например телефонный номер, или используют фонетический алфавит НАТО , Объединенный фонетический алфавит армии/флота или аналогичную специальную систему. После принятия шестнадцатеричного формата среди программистов IBM System/360 Магнусон (1968) [23] предложил руководство по произношению, в котором шестнадцатеричным буквам давались короткие названия - например, «А» произносилась как «энн», B «бет», C «крис» и т. д. [23] Другая система именования была опубликована в Интернете Роджерсом (2007). [24] который пытается сделать вербальное представление различимым в любом случае, даже если фактическое число не содержит чисел A–F. Примеры приведены в таблицах ниже. Еще одна система именования была разработана Бэббом (2015) на основе шутки из Кремниевой долины . [25]

Другие предложили использовать устную азбуку Морзе для выражения четырехбитных шестнадцатеричных цифр, где «дит» и «дах» обозначают ноль и единицу соответственно, так что «0000» произносится как «дит-дит-дит-дит» ( ....), да-дит-дит-да (-..-) озвучивает цифру со значением девять, а «да-да-да-да» (----) озвучивает шестнадцатеричную цифру для десятичной 15.

Шестнадцатеричная схема счета пальцев

Системы счета цифр были разработаны как для двоичной, так и для шестнадцатеричной системы счисления. Артур Кларк предложил использовать каждый палец в качестве переключателя включения/выключения, позволяя считать пальцы от нуля до 1023 10 на десяти пальцах. [26] Другая система счета до FF 16 (255 10 ) изображена справа.

Магнусон (1968) [23]
метод именования
Число Произношение
А Анна
Б но
С Крис
Д точка
И Эрнест
Ф мороз
Еще один
А0 анти
пятьдесят ставок
A01C Энти Кристин
1AD0 Антин Дотти
3A7D тридцать лет семьдесят точек
Роджерс (2007) [24]
метод именования
Число Произношение
А десять
Б одиннадцать
С двенадцать
Д драже
И Эптвин
Ф конец
10 техас
11 хорошие
1F тег фильма
50 фифтек
С0 двенадцатек
100 сотня
1000 тысяча
тритек-эптвин
Е1 ептек-он
C4A двенадцатьсот четыретек-десять
1743 один-тысяк-семь-
- сто-четыре-три

Знаки [ править ]

Шестнадцатеричная система может выражать отрицательные числа так же, как и десятичная: -2A для обозначения -42 10 , -B01D9 для обозначения -721369 10 и так далее.

Шестнадцатеричное число также может использоваться для выражения точных битовых комбинаций, используемых в процессоре , поэтому последовательность шестнадцатеричных цифр может представлять собой значение со знаком или даже значение с плавающей запятой . Таким образом, отрицательное число -42 10 может быть записано как FFFF FFD6 в 32-битном регистре ЦП дополнении до двух ), как C228 0000 в 32-битном регистре FPU или C045 0000 0000 0000 в 64-битном регистре FPU. (в стандарте IEEE с плавающей запятой ).

Шестнадцатеричная экспоненциальная запись [ править ]

Как десятичные числа могут быть представлены в экспоненциальной форме , так и шестнадцатеричные числа. В обозначении P используется буква P (или p для «степени»), тогда как E (или e ) служит аналогичной цели в десятичной записи E. Число после P является десятичным и представляет собой двоичную степень. Увеличение показателя степени на 1 умножает на 2, а не на 16: 20p0 = 10p1 = 8p2 = 4p3 = 2p4 = 1p5 . Обычно число нормализуется так, чтобы шестнадцатеричные цифры начинались с 1. (обычно ноль 0 без P ).

Пример: 1.3DEp42 представляет собой 1.3DE 16 × 2. 42 10 .

Обозначение P требуется стандартом двоичных чисел с плавающей запятой IEEE 754-2008 и может использоваться для литералов с плавающей запятой в C99 версии языка программирования C. [27] Используя спецификаторы преобразования %a или %A , это обозначение может быть создано реализациями printf в соответствии со спецификацией C99. семейства функций [28] и Единая спецификация Unix (IEEE Std 1003.1) POSIX . Стандарт [29]

Конверсия [ править ]

Бинарное преобразование [ править ]

Программируемый РПН -калькулятор HP-16C Computer Scientist 1982 года выпуска был разработан для программистов. Одной из его ключевых особенностей было преобразование между различными системами счисления (обратите внимание на шестнадцатеричное число на дисплее).

Большинство компьютеров манипулируют двоичными данными, но людям сложно работать с большим количеством цифр даже для относительно небольшого двоичного числа. Хотя большинство людей знакомы с системой счисления по основанию 10, гораздо проще преобразовать двоичную систему в шестнадцатеричную, чем в десятичную, поскольку каждая шестнадцатеричная цифра соответствует целому числу битов (4 10 ). В этом примере число 1111 2 преобразуется в десятичное. Поскольку каждая позиция в двоичном числе может содержать либо 1, либо 0, ее значение можно легко определить по ее позиции справа:

  • 0001 2 = 1 10
  • 0010 2 = 2 10
  • 0100 2 = 4 10
  • 1000 2 = 8 10

Поэтому:

1111 2 = 8 10 + 4 10 + 2 10 + 1 10
  = 15 10

При небольшой практике сопоставление 1111 2 с F 16 за один шаг становится простым (см. таблицу в письменном представлении ). Преимущество использования шестнадцатеричного числа вместо десятичного быстро возрастает с увеличением размера числа. Когда число становится большим, преобразование в десятичное становится очень утомительным. Однако при отображении в шестнадцатеричный формат двоичную строку легко рассматривать как группы из 4 цифр и сопоставлять каждую из них с одной шестнадцатеричной цифрой. [30]

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

(01011110101101010010) 2 = 262144 10 + 65536 10 + 32768 10 + 16384 10 + 8192 10 + 2048 10 + 512 10 + 256 10 + 64 10 + 16 10 + 2 10
  = 387922 10

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

(01011110101101010010) 2 = 0101   1110   1011   0101   0010 2
  = 5 И Б 5 2 16
  = 5ЕВ52 16

Преобразование шестнадцатеричного формата в двоичный также является прямым. [30]

Другие простые преобразования [ править ]

Хотя четверичная система (основание 4) используется мало, ее можно легко преобразовать в шестнадцатеричную или двоичную систему и обратно. Каждая шестнадцатеричная цифра соответствует паре четверичных цифр, а каждая четверичная цифра соответствует паре двоичных цифр. В приведенном выше примере 5 E B 5 2 16 = 11 32 23 11 02 4 .

Восьмеричную . систему (с основанием 8) также можно преобразовать относительно легко, хотя и не так тривиально, как с базами 2 и 4. Каждая восьмеричная цифра соответствует трем двоичным цифрам, а не четырем Таким образом, мы можем конвертировать восьмеричные и шестнадцатеричные числа с помощью промежуточного преобразования в двоичные числа с последующей перегруппировкой двоичных цифр в группы по три или четыре.

Остаток деления в исходной базе [ править ]

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

Пусть d — шестнадцатеричное число, а ряд h i h i−1 ...h 2 h 1 — шестнадцатеричные цифры, представляющие это число.

  1. я ← 1
  2. ч я ← d мод 16
  3. d ← (d - час я ) / 16
  4. Если d = 0 (возвратить серию h i ), иначе увеличьте i и перейдите к шагу 2.

«16» можно заменить любым другим основанием по желанию.

Ниже представлена ​​реализация описанного выше алгоритма на языке JavaScript для преобразования любого числа в шестнадцатеричное в строковом представлении. Его цель — проиллюстрировать приведенный выше алгоритм. Однако для серьезной работы с данными гораздо целесообразнее работать с побитовыми операторами .

функция   toHex  (  d  )   { 
   var   r   знак равно   d   %   16  ; 
    if   (  d   -   r   ==   0  )   { 
     return   toChar  (  r  ); 
    } 
   return   toHex  ((  d   -   r  )   /   16  )   +   toChar  (  r  ); 
  } 

 function   toChar  (  n  )   { 
   const   Alpha   =   "0123456789ABCDEF"  ; 
    вернуть    альфу   charAt  (  n  ); 
  } } 

Преобразование посредством сложения и умножения [ править ]

Шестнадцатеричная таблица умножения

Также возможно выполнить преобразование, назначив каждому месту в исходной базе шестнадцатеричное представление его значения — перед выполнением умножения и сложения для получения окончательного представления. Например, чтобы преобразовать число B3AD в десятичное, можно разбить шестнадцатеричное число на его цифры: B (11 10 ), 3 (3 10 ), A (10 10 ) и D (13 10 ), а затем получить итоговое число. результат умножения каждого десятичного представления на 16 п ( p — соответствующая позиция шестнадцатеричной цифры, считая справа налево, начиная с 0). В данном случае мы имеем следующее:

B3AD = (11 х 16 3 ) + (3 × 16 2 ) + (10 × 16 1 ) + (13 × 16 0 )

это 45997 по основанию 10.

Инструменты для конвертации [ править ]

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

В Microsoft Windows утилиту « Калькулятор » можно перевести в режим «Программист», который позволяет осуществлять преобразование между системами счисления 16 (шестнадцатеричное), 10 (десятичное), 8 ( восьмеричное ) и 2 ( двоичное ) — системами счисления, наиболее часто используемыми программистами. В режиме программирования экранная цифровая клавиатура содержит шестнадцатеричные цифры от A до F, которые активны, когда выбрано «Hex». Однако в шестнадцатеричном режиме калькулятор Windows поддерживает только целые числа.

Элементарная арифметика [ править ]

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

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

Действительные числа [ править ]

Рациональные числа [ править ]

Как и в других системах счисления, шестнадцатеричная система может использоваться для представления рациональных чисел , хотя повторяющиеся расширения являются обычным явлением, поскольку шестнадцать (10 16 ) имеет только один простой делитель: два.

Для любой системы счисления 0,1 (или «1/10») всегда эквивалентно единице, разделенной на представление этого базового значения в его собственной системе счисления. Таким образом, независимо от того, делится ли единица на два для двоичной системы или деление единицы на шестнадцать для шестнадцатеричной, обе эти дроби записываются как 0.1. Поскольку система счисления 16 является полным квадратом (4 2 ), дроби, выраженные в шестнадцатеричном формате, имеют нечетный период гораздо чаще, чем десятичные, и отсутствуют циклические числа (кроме тривиальных однозначных цифр). Повторяющиеся цифры отображаются, когда знаменатель в наименьших терминах имеет простой множитель , не найденный в системе счисления; таким образом, при использовании шестнадцатеричной записи все дроби со знаменателями, не являющимися степенью двойки, приводят к бесконечной строке повторяющихся цифр (например, третей и пятых). Это делает шестнадцатеричное (и двоичное) менее удобным, чем десятичное, для представления рациональных чисел, поскольку большая часть находится за пределами его диапазона конечного представления.

Все рациональные числа, конечно представимые в шестнадцатеричной системе счисления, также конечно представимы в десятичной, двенадцатеричной и шестидесятеричной системе счисления : то есть любое шестнадцатеричное число с конечным числом цифр также имеет конечное число цифр, если оно выражено в этих других системах счисления. И наоборот, только часть тех, кто конечно представим в последних базисах, конечно представима в шестнадцатеричной системе счисления. Например, десятичное число 0,1 соответствует бесконечному повторяющемуся представлению 0,1 9 в шестнадцатеричном формате. Однако шестнадцатеричная система более эффективна, чем двенадцатеричная и шестидесятеричная, для представления дробей со степенью двойки в знаменателе. Например, 0,0625 10 (одна шестнадцатая) эквивалентно 0,1 16 , 0,09 12 и 0;3,45 60 .

н Десятичная дробь
Простые множители: база, b = 10: 2 , 5 ;
б - 1 = 9: 3
Шестнадцатеричный
Простые множители: основание, b = 16 10 = 10: 2 ; б - 1 = 15 10 = F: 3, 5
Взаимный главные факторы Позиционное представление
(десятичная дробь)
Позиционное представление
(шестнадцатеричный)
главные факторы Взаимный
2 1/2 2 0.5 0.8 2 1/2
3 1/3 3 0. 3333... = 0. 3 0. 5555... = 0. 5 3 1/3
4 1/4 2 0.25 0.4 2 1/4
5 1/5 5 0.2 0. 3 5 1/5
6 1/6 2 , 3 0.1 6 0.20,2А 2 , 3 1/6
7 1/7 7 0. 142857 0. 249 7 1/7
8 1/8 2 0.125 0.2 2 1/8
9 1/9 3 0. 1 0.0.1C7 3 1/9
10 1/10 2 , 5 0.1 0.1 9 2 , 5 1/А
11 1/11 11 0. 09 0. 1745Д Б 1/Б
12 1/12 2 , 3 0.08 3 0.1 5 2 , 3 1/С
13 1/13 13 0. 076923 0.0,13Б Д 1/Д
14 1/14 2 , 7 0.0 714285 0.1 249 2 , 7 1 И
15 1/15 3 , 5 0.0 6 0. 1 3 , 5 1/Ф
16 1/16 2 0.0625 0.1 2 1/10
17 1/17 17 0. 0588235294117647 0. 11 1/11
18 1/18 2 , 3 0.0 5 0,0 Е38 2 , 3 1/12
19 1/19 19 0. 052631578947368421 0.0.0D79435E5 13 1/13
20 1/20 2 , 5 0.05 0,0 С 2 , 5 1/14
21 1/21 3 , 7 0. 047619 0. 0С3 3 , 7 1/15
22 1/22 2 , 11 0.0 45 0,0 БА2Е8 2 , Б 1/16
23 1/23 23 0. 0434782608695652173913 0. 0B21642C859 17 1/17
24 1/24 2 , 3 0.041 6 0,0 А 2 , 3 1/18
25 1/25 5 0.04 0.0.0A3D7 5 1/19
26 1/26 2 , 13 0.0 384615 0.0 9Д8 2 , Д 1/1А
27 1/27 3 0. 037 0.097B425ED 3 1/1Б
28 1/28 2 , 7 0.03 571428 0.0 924 2 , 7 1/1С
29 1/29 29 0. 0344827586206896551724137931 0. 08D3DCB 1/1D
30 1/30 2 , 3 , 5 0.0 3 0.0 8 2 , 3 , 5 1/1Е
31 1/31 31 0. 032258064516129 0. 08421 1F 1/1F
32 1/32 2 0.03125 0.08 2 1/20
33 1/33 3 , 11 0. 03 0. 07C1F 3 , Б 1/21
34 1/34 2 , 17 0.0 2941176470588235 0.0 78 2 , 11 1/22
35 1/35 5 , 7 0.0 285714 0. 075 5 , 7 1/23
36 1/36 2 , 3 0.02 7 0,0 71С 2 , 3 1/24
37 1/37 37 0. 027 0.0.06EB3E453 25 1/25

Иррациональные числа [ править ]

В таблице ниже даны разложения некоторых распространенных иррациональных чисел в десятичном и шестнадцатеричном виде.

Число Позиционное представление
Десятичная дробь Шестнадцатеричный
2 (длина диагонали единичного квадрата ) 1.414 213 562 373 095 048 ... 1.6A09E667F3BCD...
3 (длина диагонали единичного куба ) 1.732 050 807 568 877 293 ... 1.BB67AE8584CAA...
5 (длина диагонали прямоугольника ×2 1 ) 2.236 067 977 499 789 696 ... 2.3C6EF372FE95...
φ (фи, золотое сечение = (1+ 5 )/2 ) 1.618 033 988 749 894 848 ... 1.9E3779B97F4A...
π (пи, отношение длины окружности к диаметру круга) 3.141 592 653 589 793 238 462 643
383 279 502 884 197 169 399 375 105 ...
3.243F6A8885A308D313198A2E0
3707344A4093822299F31D008...
е (основание натурального логарифма ) 2.718 281 828 459 045 235 ... 2.B7E151628AED2A6B...
τ ( константа Туэ–Морса ) 0.412 454 033 640 107 597 ... 0.6996 9669 9669 6996...
γ (предельная разница между гармоническим рядом и натуральным логарифмом) 0.577 215 664 901 532 860 ... 0.93C467E37DB0C7A4D1B...

Полномочия [ править ]

Степени двойки имеют очень простое разложение в шестнадцатеричном формате. Первые шестнадцать степеней двойки показаны ниже.

2 Икс Ценить Значение (десятичное)
2 0 1 1
2 1 2 2
2 2 4 4
2 3 8 8
2 4 10 шестигранников 16 дек
2 5 20 шестигранников 32 дек.
2 6 40 шестигранников 64 дек.
2 7 80 шестигранников 128 дек.
2 8 100 шестигранников 256 дек.
2 9 200 шестигранников 512 дек.
2 А (2 10 дек. ) 400 шестигранников 1024 дек.
2 Б (2 11 дек ) 800 шестигранников 2048 декабрь
2 С (2 12 дек ) 1000 шестигранников 4096 дек.
2 Д (2 13 дек ) 2000 шестнадцатеричных 8192 дек.
2 И (2 14 дек ) 4000 шестигранников 16 384 дек.
2 Ф (2 15 дек ) 8000 шестигранников 32768 дек.
2 10 (2 16 дек ) 10000 шестнадцатеричных 65 536 дек.

История культуры [ править ]

Традиционными китайскими единицами измерения были шестнадцатеричные. Например, один джин (斤) в старой системе равен шестнадцати таэлям . Суанпан . (китайские счеты ) можно использовать для выполнения шестнадцатеричных вычислений, таких как сложение и вычитание [31]

Как и в случае с двенадцатеричной системой счисления, время от времени предпринимались попытки сделать шестнадцатеричную систему счисления предпочтительной. Эти попытки часто предлагают конкретное произношение и символы для отдельных цифр. [32] Некоторые предложения унифицируют стандартные меры, чтобы они были кратны 16. [33] [34] Первое такое предложение было выдвинуто Джоном В. Нистромом в «Проекте новой системы арифметики, веса, меры и монет: предлагается называть тональной системой с шестнадцатью в основании» , опубликованном в 1862 году. [35] Нистром среди прочего предложил шестнадцатеричное время , которое делит сутки на 16, 16 «часов» (или «10 тимов », произносится «тонтим» ). так что в сутках [36]

Слово «шестнадцатеричный» впервые упоминается в 1952 году. [37] Оно макаронное в том смысле, что сочетает в себе греческое ἕξ (шестнадцатеричное) «шесть» с латинским -десятичным числом . Полностью латинская альтернативная шестидесятеричная система счисления (сравните слово «шестидесятеричная» для системы счисления по основанию 60) старше и, по крайней мере, время от времени используется с конца 19 века. [38] Он до сих пор используется в документации Bendix в 1950-х годах . Шварцман (1994) утверждает, что использования шестнадцатеричного числа можно было избежать из-за его наводящего на размышления сокращения обозначения пола . [39] Многие западные языки с 1960-х годов приняли термины, эквивалентные по формированию шестнадцатеричной системе счисления (например, французский шестнадцатеричный , итальянский esadecimale , румынский шестнадцатеричный , сербский шестнадцатеричный и т. д.). но другие ввели термины, которые заменяют «шестнадцать» родными словами (например, греческий δεκαεξαδικός, исландский секстандакерфи , русский шестнадцатеричной и т. д.)

Терминология и обозначения не устоялись до конца 1960-х годов. В 1969 году Дональд Кнут утверждал, что этимологически правильным термином будет «семинарный» или, возможно, «сиденарный» , латинский термин, предназначенный для обозначения «сгруппированного по 16» по образцу двоичного , троичного , четверичного и т. д. Согласно аргументу Кнута, правильными терминами для десятичной и восьмеричной арифметики будут десятичная и восьмеричная соответственно. [40] Альфред Б. Тейлор использовал сединарную систему в своей работе середины 1800-х годов над альтернативными основаниями счисления, хотя он отверг основание 16 из-за ее «неудобного количества цифр». [41] [42]

Нынешнее обозначение с использованием букв от A до F стало стандартом де-факто, начиная с 1966 года, после публикация руководства по Fortran IV для IBM System/360 , которое (в отличие от более ранних вариантов Fortran) признает стандарт ввода шестнадцатеричных констант. [43] Как отмечалось выше, альтернативные обозначения использовались NEC (1960) и The Pacific Data Systems 1020 (1964). Стандарт, принятый IBM, похоже, получил широкое распространение к 1968 году, когда Брюс Алан Мартин в своем письме в редакцию CACM жалуется , что

С нелепым выбором букв A, B, C, D, E, F в качестве символов шестнадцатеричных чисел, усугубляющих и без того неприятные проблемы различения восьмеричных (или шестнадцатеричных) чисел от десятичных чисел (или имен переменных), пришло время пересмотреть наши цифровые символы. Это нужно было сделать до того, как плохой выбор превратился в стандарт де-факто!

Аргумент Мартина заключался в том, что использование цифр от 0 до 9 в недесятичных числах «подразумевает для нас схему десятичных значений»: «Почему бы не использовать совершенно новые символы (и имена) для семи или пятнадцати ненулевых цифр, необходимых в восьмеричной или шестнадцатеричной форме. Даже использование букв от A до P было бы улучшением, но совершенно новые символы могли бы отражать двоичную природу системы» . [19] Он также утверждал, что «повторное использование букв алфавита для числовых цифр представляет собой гигантский шаг назад по сравнению с изобретением отдельных, неалфавитных глифов для цифр шестнадцать столетий назад» (как цифры Брахми , а позже в индуистско-арабской системе счисления ), и что последние стандарты ASCII (ASA X3.4-1963 и USAS X3.4-1968) «должно было сохранить шесть позиций кодовой таблицы после десяти десятичных цифр -- вместо того, чтобы без необходимости заполнять их знаками препинания" («:;<=>?»), которое могло быть размещено в другом месте среди 128 доступных позиций.

Base16 (кодировка передачи) [ править ]

Base16 (как имя собственное без пробела) также может относиться к кодировке двоичного текста, принадлежащей к тому же семейству, что и Base32 , Base58 и Base64 .

В этом случае данные разбиваются на 4-битные последовательности, и каждое значение (от 0 до 15 включительно) кодируется с помощью одного из 16 символов из набора символов ASCII . Хотя можно использовать любые 16 символов из набора символов ASCII, на практике всегда используются цифры ASCII «0»–«9» и буквы «A»–«F» (или строчные буквы «a»–«f»). выбрано для соответствия стандартным письменным обозначениям шестнадцатеричных чисел.

Кодировка Base16 имеет несколько преимуществ:

  • Большинство языков программирования уже имеют средства для анализа шестнадцатеричных чисел в кодировке ASCII.
  • Поскольку 4-битные размеры составляют ровно половину байта, их легче обрабатывать, чем 5 или 6 битов Base32 и Base64 соответственно.
  • Символы 0–9 и A–F являются универсальными в шестнадцатеричной записи, поэтому их легко понять с первого взгляда, без необходимости обращаться к таблице поиска символов.
  • Многие архитектуры ЦП имеют специальные инструкции, которые позволяют получить доступ к полубайту (также известному как « полубайт »), что делает его более эффективным в аппаратном обеспечении, чем Base32 и Base64.

Основными недостатками кодировки Base16 являются:

  • Эффективность использования пространства составляет всего 50%, поскольку каждое 4-битное значение исходных данных будет закодировано как 8-битный байт. Напротив, кодировки Base32 и Base64 имеют эффективность использования пространства 63% и 75% соответственно.
  • Возможная дополнительная сложность, связанная с необходимостью принимать как прописные, так и строчные буквы.

Поддержка кодировки Base16 широко распространена в современных компьютерах. Это основа стандарта W3C для процентного кодирования URL-адресов , где символ заменяется знаком процента «%» и его формой в кодировке Base16. Большинство современных языков программирования напрямую включают поддержку форматирования и анализа чисел в кодировке Base16.

См. также [ править ]

Ссылки [ править ]

  1. ^ «Шестнадцатеричная система» . Цифровой путеводитель по Ионосу . Архивировано из оригинала 26 августа 2022 г. Проверено 26 августа 2022 г.
  2. ^ Кнут, Дональд Эрвин (1986). ТеХбук . Дуэйн Бибби. Ридинг, Массачусетс, ISBN  0-201-13447-0 . OCLC   12973034 . Архивировано из оригинала 16 января 2022 г. Проверено 15 марта 2022 г. {{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  3. ^ Строка "\x1B[0m\x1B[25;1H" определяет последовательность символов Esc [ 0 м Esc [ 2 5; 1 Ч Ноль . Это escape-последовательности, используемые на терминале ANSI , которые сбрасывают набор символов и цвет, а затем перемещают курсор на строку 25.
  4. ^ «Стандарт Юникод, версия 7» (PDF) . Юникод . Архивировано (PDF) из оригинала 3 марта 2016 г. Проверено 28 октября 2018 г.
  5. ^ «Модула-2 – Словарь и представление» . Модуль −2 . Архивировано из оригинала 13 декабря 2015 г. Проверено 1 ноября 2015 г.
  6. ^ «Введение в типы данных VHDL» . Учебное пособие по ПЛИС . 2020-05-10. Архивировано из оригинала 23 августа 2020 г. Проверено 21 августа 2020 г.
  7. ^ «*read-base* переменная в Common Lisp» . КЛХС . Архивировано из оригинала 3 февраля 2016 г. Проверено 10 января 2015 г.
  8. ^ «*print-base* переменная в Common Lisp» . КЛХС . Архивировано из оригинала 26 декабря 2014 г. Проверено 10 января 2015 г.
  9. ^ MSX скоро появится - Часть 2: Внутри MSX. Архивировано 24 ноября 2010 г. на Wayback Machine Compute! , выпуск 56, январь 1985 г., с. 52
  10. ^ Программы BBC BASIC не полностью переносятся на Microsoft BASIC (без изменений), поскольку последний принимает &для префикса восьмеричных значений. (Microsoft BASIC в основном использует &O для префикса восьмеричного значения, и он использует &H для префикса шестнадцатеричного числа, но сам по себе амперсанд интерпретируется по умолчанию как восьмеричный префикс.
  11. ^ «Объяснение шестнадцатеричных веб-цветов» . Архивировано из оригинала 22 апреля 2006 г. Проверено 11 января 2006 г.
  12. ^ «Кодировка символов ISO-8859-1 (ISO Latin 1)» . www.ic.unicamp.br . Архивировано из оригинала 29 июня 2019 г. Проверено 26 июня 2019 г.
  13. ^ Перейти обратно: а б с д Это ж г Савард, Джон Дж. Г. (2018) [2005]. «Компьютерная арифметика» . четырехблок . Первые дни шестнадцатеричной системы счисления. Архивировано из оригинала 16 июля 2018 г. Проверено 16 июля 2018 г.
  14. ^ «2.1.3 Шестнадцатеричная система счисления». Справочное руководство программатора G15D (PDF) . Лос-Анджелес, Калифорния, США: Bendix Computer , подразделение Bendix Aviation Corporation . п. 4. Архивировано (PDF) из оригинала 1 июня 2017 г. Проверено 1 июня 2017 г. Эта база используется потому, что группа из четырех битов может представлять любое из шестнадцати различных чисел (от нуля до пятнадцати). Присвоив символ каждой из этих комбинаций, мы приходим к системе записи, называемой шестнадцатеричной (в разговоре обычно «шестнадцатеричной», потому что никто не хочет сокращать слово «секс»). Символами шестнадцатеричного языка являются десять десятичных цифр, а на пишущей машинке G-15 - буквы «u», «v», «w», «x», «y» и «z». Это произвольные обозначения; другие компьютеры могут использовать другие символы алфавита для этих последних шести цифр.
  15. ^ Гилл, С.; Нигер, RE; Мюллер, Делавэр; Нэш, JP; Робертсон, Дж. Э.; Шапин, Т.; Уэслер, ди-джей (1 сентября 1956 г.). Нэш, JP (ред.). «Программирование ILLIAC - Руководство по подготовке задач к решению с помощью цифрового компьютера Университета Иллинойса» (PDF) . bitsavers.org (Четвертое издание. Переработанное и исправленное изд.). Урбана, Иллинойс, США: Лаборатория цифровых компьютеров, Аспирантура, Университет Иллинойса . стр. 3–2. Архивировано (PDF) из оригинала 31 мая 2017 г. Проверено 18 декабря 2014 г.
  16. ^ Электронный компьютер ROYAL PRECISION LGP – 30 РУКОВОДСТВО ПО ПРОГРАММИРОВАНИЮ . Порт-Честер, Нью-Йорк: Royal McBee Corporation . Апрель 1957 г. Архивировано из оригинала 31 мая 2017 г. Проверено 31 мая 2017 г. (Обратите внимание: эта несколько странная последовательность была из следующих шести последовательных цифровых кодов клавиатуры в LGP-30 .) 6-битном коде символов
  17. ^ Манти, Штеффен; Лейбрандт, Клаус (2 июля 2002 г.). «ПЕРМЬ и АЛГОЛ» (PDF) (на немецком языке). Архивировано (PDF) из оригинала 3 октября 2018 г. Проверено 19 мая 2018 г.
  18. ^ Цифровой компьютер NEC Parametron типа NEAC-1103 (PDF) . Токио, Япония: Nippon Electric Company Ltd., 1960. Кат. № 3405-С. Архивировано (PDF) из оригинала 31 мая 2017 г. Проверено 31 мая 2017 г.
  19. ^ Перейти обратно: а б с Мартин, Брюс Алан (октябрь 1968 г.). «Письма в редакцию: О двоичной системе счисления» . Коммуникации АКМ . 11 (10). Associated Universities Inc.: 658. doi : 10.1145/364096.364107 . S2CID   28248410 .
  20. ^ Перейти обратно: а б Уитакер, Рональд О. (январь 1972 г.). Написано в Индианаполисе, Индиана, США. «Подробнее о человеке/машине» (PDF) . Буквы. Датаматизация . Том. 18, нет. 1. Баррингтон, Иллинойс, США: Техническая издательская компания . п. 103. Архивировано (PDF) из оригинала 5 декабря 2022 г. Проверено 24 декабря 2022 г. (1 страница)
  21. ^ Перейти обратно: а б Уитакер, Рональд О. (10 августа 1976 г.) [24 февраля 1975 г.]. «Комбинированный дисплей и переключатель диапазона для использования с цифровыми приборами, использующими двоичную систему счисления» (PDF) . Индианаполис, Индиана, США. Патент США 3974444А. Архивировано (PDF) из оригинала 24 декабря 2022 г. Проверено 24 декабря 2022 г. (7 страниц)
  22. ^ «SN5446A, '47A, '48, SN54LS47, 'LS48, 'LS49, SN7446A, '47A, '48, SN74LS47, 'LS48, 'LS49 Декодеры/драйверы BCD-семисегментов' . Даллас, Техас, США: Texas Instruments Incorporated . Март 1988 г. [1974 г.]. СДЛС111. Архивировано (PDF) из оригинала 20 октября 2021 г. Проверено 15 сентября 2021 г. (29 страниц)
  23. ^ Перейти обратно: а б с Магнусон, Роберт А. (январь 1968 г.). «Руководство по шестнадцатеричному произношению». Датаматизация . Том. 14, нет. 1. п. 45.
  24. ^ Перейти обратно: а б Роджерс, СР (2007). «Слова шестнадцатеричных чисел» . Интуитор . Архивировано из оригинала 17 сентября 2019 г. Проверено 26 августа 2019 г.
  25. ^ Бэбб, Тим (2015). «Как произносится шестнадцатеричный» . Бзарг . Архивировано из оригинала 11 ноября 2020 г. Проверено 1 января 2021 г.
  26. ^ Кларк, Артур; Пол, Фредерик (2008). Последняя теорема . Баллантайн. п. 91 . ISBN  978-0007289981 .
  27. ^ «ISO/IEC 9899:1999 – Языки программирования – C» . ИСО . Исо.орг. 08.12.2011. Архивировано из оригинала 10 октября 2016 г. Проверено 8 апреля 2014 г.
  28. ^ «Обоснование международного стандарта — языки программирования — C» (PDF) . Открытые стандарты . 5.10. Апрель 2003 г., стр. 52, 153–154, 159. Архивировано (PDF) из оригинала 6 июня 2016 г. Проверено 17 октября 2010 г.
  29. ^ IEEE и Открытая группа (2013) [2001]. «dprintf, fprintf, printf, snprintf, sprintf — вывод в формате печати» . Базовые спецификации открытой группы (выпуск 7, IEEE Std 1003.1, изд. 2013 г.). Архивировано из оригинала 21 июня 2016 г. Проверено 21 июня 2016 г.
  30. ^ Перейти обратно: а б Мано, М. Моррис; Силетти, Майкл Д. (2013). Цифровой дизайн - введение в Verilog HDL (Пятое изд.). Образование Пирсона . стр. 6, 8–10. ISBN  978-0-13-277420-8 .
  31. ^ «算盤 Шестнадцатеричное сложение и вычитание на китайских счетах» . totton.idirect.com . Архивировано из оригинала 6 июля 2019 г. Проверено 26 июня 2019 г.
  32. ^ «Предложение шестнадцатеричного символа по основанию 4^2» . Хауптмех . Архивировано из оригинала 20 октября 2021 г. Проверено 4 сентября 2008 г.
  33. ^ «Штаб-квартира Интуитора Хекса» . Интуитор . Архивировано из оригинала 4 сентября 2010 г. Проверено 28 октября 2018 г.
  34. ^ Нимитц, Рикардо Канчо (21 октября 2003 г.). «Предложение о добавлении шести шестнадцатеричных цифр (AF) в Юникод» . ДКУУГ Стандартизация . Архивировано из оригинала 4 июня 2011 г. Проверено 28 октября 2018 г.
  35. ^ Нистром, Джон Уильям (1862). Проект новой системы арифметики, веса, меры и монет: предлагается назвать тональной системой с шестнадцатью в основании . Филадельфия: Липпинкотт.
  36. ^ Нистром (1862), с. 33: «При выражении времени, угла круга или точек на компасе единицу тим следует отмечать как целое число, а ее части — как тональные дроби , так как 5·86 тимов — это пять раз, а метонби [*»сутим и метонби» Джон Нистром случайно приводит часть числа в десятичных именах; в схеме произношения Нистрома 5 = su, 8 = me, 6 = by, см. unifoundry.com. Архивировано 19 мая 2021 г. на Wayback Machine ].»
  37. ^ CE Fröberg, Таблицы шестнадцатеричного преобразования , Лунд (1952).
  38. ^ В словаре Century 1895 года используется шестнадцатеричное число в более общем смысле «относительно шестнадцати». Раннее явное использование шестнадцатеричного числа в смысле «использования системы счисления 16» встречается также в 1895 году в Журнале Американского географического общества Нью-Йорка , тт. 27–28, с. 197.
  39. ^ Шварцман, Стивен (1994). Слова математики: этимологический словарь математических терминов, используемых на английском языке . Математическая ассоциация Америки. п. 105. ИСБН  0-88385-511-9 . св шестнадцатеричный
  40. ^ Кнут, Дональд. (1969). Искусство компьютерного программирования , Том 2 . ISBN   0-201-03802-1 . (Глава 17.)
  41. ^ Альфред Б. Тейлор, Отчет о мерах и весах , Фармацевтическая ассоциация, 8-я ежегодная сессия, Бостон, 15 сентября 1859 г. См. страницы, 33 и 41.
  42. ^ Альфред Б. Тейлор, «Восьмеричная нумерация и ее применение к системе мер и весов», Proc Amer. Фил. Соц. Том XXIV. Архивировано 24 июня 2016 г. в Wayback Machine , Филадельфия, 1887 г.; страницы 296–366. См. стр. 317 и 322.
  43. ^ Язык IBM System/360 FORTRAN IV. Архивировано 19 мая 2021 г. в Wayback Machine (1966), стр. 19. 13.