stringtranslate.com

Восьмеричный

Восьмеричная система счисления ( основание 8 ) — это система счисления , в основе которой лежит восьмерка .

В десятичной системе каждый знак представляет собой степень десяти . Например:

В восьмеричной системе каждое место соответствует степени восьмерки. Например:

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

Восьмеричные цифры можно легко преобразовать из двоичных представлений (аналогично четвертичной системе счисления ) путем группировки последовательных двоичных цифр в группы по три (начиная справа, для целых чисел). Например, двоичное представление десятичного числа 74 — это 1001010. Два нуля можно добавить слева: (00)1 001 010 , соответствующие восьмеричным цифрам 1 1 2 , что дает восьмеричное представление 112.

Применение

В Китае

Аранжировка восьми триграмм Фуси «Ранние небеса»

Восемь багуа или триграмм И Цзин соответствуют восьмеричным цифрам:

Готфрид Вильгельм Лейбниц установил связь между триграммами, гексаграммами и двоичными числами в 1703 году. [1]

Коренные американцы

Европейцы

В компьютерах

Восьмеричная система стала широко использоваться в вычислениях, когда такие системы, как UNIVAC 1050 , PDP-8 , ICL 1900 и мэйнфреймы IBM, использовали 6-битные , 12-битные , 24-битные или 36-битные слова. Восьмеричная цифра была идеальным сокращением двоичного кода для этих машин, поскольку размер их слова делится на три (каждая восьмеричная цифра представляет три двоичных цифры). Таким образом, две, четыре, восемь или двенадцать цифр могут кратко отобразить целое машинное слово . Это также сократило расходы, позволив использовать трубки Никси , семисегментные дисплеи и калькуляторы для консолей оператора, где двоичные дисплеи были слишком сложны для использования, десятичные дисплеи требовали сложного оборудования для преобразования систем счисления, а шестнадцатеричные дисплеи требовались для отображения большего количества цифр. .

Однако все современные вычислительные платформы используют 16-, 32- или 64-битные слова, которые далее делятся на восьмибитные байты . В таких системах потребуются три восьмеричные цифры на байт, причем старшая восьмеричная цифра представляет две двоичные цифры (плюс один бит следующего значащего байта, если таковой имеется). Восьмеричное представление 16-битного слова требует 6 цифр, но старшая восьмеричная цифра представляет (довольно неэлегантно) только один бит (0 или 1). Такое представление не дает возможности легко прочитать самый значимый байт, поскольку он размазан по четырем восьмеричным цифрам. Поэтому сегодня в языках программирования чаще используется шестнадцатеричное число, поскольку две шестнадцатеричные цифры точно определяют один байт. На некоторых платформах с размером слова, равным степени двойки, все еще есть подслова инструкций, которые легче понять, если они отображаются в восьмеричном формате; сюда входят семейства PDP-11 и Motorola 68000 . Современная повсеместно распространенная архитектура x86 также относится к этой категории, но восьмеричная система на этой платформе используется редко, хотя некоторые свойства двоичного кодирования опкодов становятся более очевидными при отображении в восьмеричном формате, например байт ModRM, который делится на поля длиной 2, 3 и 3 бита, поэтому восьмеричное число может быть полезно при описании этих кодировок. До появления ассемблеров некоторые программисты вручную кодировали программы в восьмеричном формате; например, Дик Уиппл и Джон Арнольд написали Tiny BASIC Extended непосредственно в машинном коде, используя восьмеричные числа. [11]

Восьмеричное число иногда используется в вычислениях вместо шестнадцатеричного, возможно, чаще всего в наше время в сочетании с правами доступа к файлам в системах Unix (см. chmod ). Преимущество этой системы заключается в том, что она не требует каких-либо дополнительных символов в качестве цифр (шестнадцатеричная система имеет основание 16 и, следовательно, требует шести дополнительных символов помимо 0–9). Он также используется для цифровых дисплеев.

В языках программирования восьмеричные литералы обычно обозначаются различными префиксами , включая цифру 0, буквы oили q, комбинацию цифр и букв 0oили символ &[12] или $. В соглашении Motorola восьмеричные числа начинаются с префикса @, тогда как маленькая (или заглавная [13] ) буква o[13] или q[13] добавляется в качестве постфикса в соответствии с соглашением Intel . [14] [15] В Concurrent DOS , Multiuser DOS и REAL/32, а также в DOS Plus и DR-DOS различные переменные среды, такие как $CLS , $ON , $OFF , $HEADER или $FOOTER , поддерживают \nnnвосьмеричное представление чисел. [16] [17] [18] и DR-DOS DEBUG\ также используют префикс восьмеричных чисел.

Например, литерал 73 (основание 8) может быть представлен как , 073, o73, q73, 0o73, \73, @73или на разных языках.&73$7373o

В новых языках префикс отказались от префикса 0, поскольку десятичные числа часто представляются ведущими нулями. Префикс qбыл введен, чтобы избежать ошибочного принятия префикса oза ноль, а префикс 0oбыл введен, чтобы избежать начала числового литерала с буквенного символа (например, oили q), поскольку это могло привести к тому, что литерал можно было спутать с именем переменной. Префикс 0oтакже соответствует модели, заданной префиксом 0x, используемым для шестнадцатеричных литералов в языке C ; поддерживается Haskell , [19] OCaml , [20] Python начиная с версии 3.0, [21] Raku , [22] Ruby , [23] Tcl начиная с версии 9, [24] PHP начиная с версии 8.1, [25] ] Rust [26] и ECMAScript начиная с ECMAScript 6 [27] (префикс 0изначально обозначал базу 8 в JavaScript , но мог вызвать путаницу, [28] поэтому он не рекомендуется в ECMAScript 3 и исключен из ECMAScript 5 [29] ).

Восьмеричные числа, которые используются в некоторых языках программирования (C, Perl , PostScript ...) для текстового/графического представления строк байтов, когда некоторые значения байтов (непредставленные в кодовой странице, неграфические, имеющие специальное значение в текущем контексте или иным образом нежелательно) должно быть экранировано как \nnn. Восьмеричное представление может быть особенно удобно для байтов, отличных от ASCII, в формате UTF-8 , который кодирует группы из 6 бит и где любой начальный байт имеет восьмеричное значение \3nn, а любой байт продолжения имеет восьмеричное значение \2nn.

Восьмеричная система также использовалась для операций с плавающей запятой в компьютерах Ferranti Atlas (1962), Burroughs B5500 (1964), Burroughs B5700 (1971), Burroughs B6700 (1971) и Burroughs B7700 (1972).

В авиации

Транспондеры в самолетах передают «кричащий» код , выраженный в виде четырех-восьмеричного числа, при опросе наземного радара. Этот код используется для различения разных самолетов на экране радара.

Преобразование между базами

Преобразование десятичной системы в восьмеричную

Метод последовательного евклидова деления на 8

Чтобы преобразовать целые десятичные числа в восьмеричные, разделите исходное число на максимально возможную степень 8 и разделите остатки на последовательно меньшие степени 8, пока степень не станет равна 1. Восьмеричное представление формируется из частных, записанных в порядке, генерируемом алгоритм. Например, чтобы преобразовать 125 10 в восьмеричное:

125 = 8 2 × 1 + 61
61 = 8 1 × 7 + 5
5 = 8 0 × 5 + 0

Следовательно, 125 10 = 175 8 .

Другой пример:

900 = 8 3 × 1 + 388
388 = 8 2 × 6 + 4
4 = 8 1 × 0 + 4
4 = 8 0 × 4 + 0

Следовательно, 900 10 = 1604 8 .

Метод последовательного умножения на 8

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

Пример. Преобразование 0,1640625 в восьмеричное число:

0,1640625 × 8 = 1,3125 = 1 + 0,3125
0,3125 × 8 = 2,5 = 2 + 0,5
0,5 × 8 = 4,0 = 4 + 0

Следовательно, 0,1640625 10 = 0,124 8 .

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

Метод последовательного дублирования

Чтобы преобразовать целые десятичные числа в восьмеричные, добавьте к числу префикс «0.». Выполните следующие действия, пока цифры остаются в правой части системы счисления: Удвойте значение в левой части системы счисления, используя восьмеричные правила, переместите точку системы счисления на одну цифру вправо, а затем поместите удвоенное значение под текущую цифру. значение так, чтобы точки системы счисления совпадали. Если перемещенная точка системы счисления пересекает цифру 8 или 9, преобразуйте ее в 0 или 1 и добавьте перенос к следующей левой цифре текущего значения. Добавьте восьмеричные цифры слева от системы счисления и просто опустите эти цифры вправо без изменений.

Пример:

0,4 9 1 8 десятичное значение +0 --------- 4,9 1 8 +1 0 -------- 6 1,1 8 +1 4 2 -------- 7 5 3,8 +1 7 2 6 -------- 1 1 4 6 6. восьмеричное значение

Преобразование восьмеричных чисел в десятичные

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

В этой формуле a i — преобразуемая отдельная восьмеричная цифра, где i — позиция цифры (считая от 0 для самой правой цифры).

Пример. Преобразование 764 8 в десятичное число:

764 8 = 7 × 8 2 + 6 × 8 1 + 4 × 8 0 = 448 + 48 + 4 = 500 10

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

Пример: 65 8 = 6 × 8 + 5 = 53 10

Метод последовательного дублирования

Чтобы преобразовать восьмеричные числа в десятичные, добавьте к числу префикс «0.». Выполните следующие действия до тех пор, пока цифры остаются в правой части системы счисления: Удвойте значение в левой части системы счисления, используя десятичные правила, переместите точку системы счисления на одну цифру вправо, а затем поместите удвоенное значение под текущую цифру. значение так, чтобы точки системы счисления совпадали. Вычтите десятичные цифры слева от системы счисления и просто опустите эти цифры вправо без изменений.

Пример:

0,1 1 4 6 6 восьмеричное значение -0 ----------- 1,1 4 6 6 - 2 ---------- 9,4 6 6 - 1 8 ---------- 7 6,6 6 - 1 5 2 ---------- 6 1 4,6 - 1 2 2 8 ---------- 4 9 1 8. десятичное значение

Преобразование восьмеричных чисел в двоичные

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

Пример: Преобразовать 51 8 в двоичный формат:

5 8 = 101 2
1 8 = 001 2

Следовательно, 51 8 = 101 001 2 .

Двоичное преобразование в восьмеричное

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

Например, преобразуйте двоичное число 1010111100 в восьмеричное:

Следовательно, 1010111100 2 = 1274 8 .

Преобразуйте двоичное число 11100.01001 в восьмеричное:

Следовательно, 11100.01001 2 = 34,22 8 .

Преобразование восьмеричных чисел в шестнадцатеричные

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

Например, преобразуйте восьмеричное число 1057 в шестнадцатеричное:

В двоичный:
затем в шестнадцатеричном виде:

Следовательно, 1057 8 = 22F 16 .

Преобразование шестнадцатеричного числа в восьмеричное

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

Например, чтобы преобразовать 3FA5 16 :

В двоичный:
затем в восьмеричную:

Следовательно, 3FA5 16 = 37645 8 .

Вещественные числа

Фракции

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

Иррациональные числа

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

Смотрите также

Рекомендации

  1. ^ Лейбниц, Готфрид Вильгельм (1703). «Объяснение двоичной арифметики». leibniz-translations.com . Архивировано из оригинала 11 февраля 2021 г. Проверено 02 марта 2022 г.
  2. ^ Ашер, Марсия (1992). «Этноматематика: мультикультурный взгляд на математические идеи». Математический журнал колледжа . 23 (4): 353–355. дои : 10.2307/2686959. JSTOR  2686959.
  3. ^ Авелино, Эриберто (2006). «Типология систем счисления Пейма и пределы Мезоамерики как лингвистической области» (PDF) . Лингвистическая типология . 10 (1): 41–60. дои : 10.1515/LINGTY.2006.002. S2CID  20412558. Архивировано (PDF) из оригинала 4 июня 2011 г. Проверено 21 ноября 2007 г.
  4. ^ Зима, Вернер (1991). «Некоторые мысли об индоевропейских цифрах». В Гвоздановиче, Ядранка (ред.). Индоевропейские цифры . Тенденции в лингвистике. Том. 57. Берлин: Мутон де Грюйтер. стр. 13–14. ISBN 3-11-011322-8. Архивировано из оригинала 1 апреля 2023 г. Проверено 9 июня 2013 г.
  5. ^ Уилкинс, Джон (1668). Очерк реального характера и философского языка. Лондон. п. 190. Архивировано из оригинала 1 апреля 2023 г. Проверено 8 февраля 2015 г.
  6. ^ Дональд Кнут , Искусство компьютерного программирования
  7. ^ См. Х. Р. Фален, «Хью Джонс и октавные вычисления», The American Mathematical Monthly 56 (август – сентябрь 1949 г.): 461–465.
  8. ^ Джеймс Андерсон, О восьмеричной арифметике [название появляется только в заголовках страниц], Отдых в сельском хозяйстве, естествознании, искусстве и разной литературе. Архивировано 1 апреля 2023 г. в Wayback Machine , Vol. IV, № 6 (февраль 1801 г.), Т. Бенсли, Лондон; страницы 437-448.
  9. ^ Альфред Б. Тейлор, Отчет о мерах и весах, Фармацевтическая ассоциация, 8-я ежегодная сессия, Бостон, 15 сентября 1859 г. См. стр. 48 и 53.
  10. ^ Альфред Б. Тейлор, Восьмеричная нумерация и ее применение к системе мер и весов, Proc. амер. Фил. Соц. Том XXIV. Архивировано 1 апреля 2023 г. в Wayback Machine , Филадельфия, 1887 г.; страницы 296-366. См. стр. 327 и 330.
  11. ^ «Кодовая таблица туберкулеза». Журнал доктора Добба по компьютерной гимнастике и ортодонтии, Бегущий свет без лишнего байта . 1 (1). Декабрь 1975 года.
  12. ^ Корпорация Microsoft (1987). «Константы, переменные, выражения и операторы». Руководство пользователя GW-BASIC. Архивировано из оригинала 05 января 2016 г. Проверено 12 декабря 2015 г.
  13. ^ abc «2.4.1 Числовые константы». CP/M-86 - Операционная система - Руководство программиста (PDF) (3-е изд.). Пасифик Гроув, Калифорния, США: Цифровые исследования . Январь 1983 г. [1981]. п. 9. Архивировано (PDF) из оригинала 27 февраля 2020 г. Проверено 27 февраля 2020 г.[1] (1+viii+122+2 страницы)
  14. ^ Кювелер, Герд; Швох, Дитрих (2013) [1996]. Arbeitsbuch Informatik - eine praxisorientierte Einführung in die Datenverarbeitung mit Projektaufgabe (на немецком языке). Vieweg-Verlag, перепечатка: Springer-Verlag. дои : 10.1007/978-3-322-92907-5. ISBN 978-3-528-04952-2. 978-3-32292907-5. Архивировано из оригинала 1 апреля 2023 г. Проверено 5 августа 2015 г.
  15. ^ Кювелер, Герд; Швох, Дитрих (4 октября 2007 г.). Informatik für Ingenieure und Naturwissenschaftler: PC- und Mikrocomputertechnik, Rechnernetze (на немецком языке). Том. 2 (5-е изд.). Vieweg, перепечатка: Springer-Verlag. ISBN 978-3-83489191-4. 978-3-83489191-4. Архивировано из оригинала 1 апреля 2023 г. Проверено 5 августа 2015 г.
  16. ^ Пол, Матиас Р. (30 июля 1997 г.). NWDOS-TIPs — советы и подсказки для Novell DOS 7, с просмотром недокументированных подробностей, ошибок и обходных путей. Выпуск 157 (на немецком языке) (3-е изд.). Архивировано из оригинала 4 ноября 2016 г. Проверено 6 августа 2014 г. {{cite book}}: |work=игнорируется ( помощь ) (Примечание. NWDOSTIP.TXT — это всеобъемлющая работа по Novell DOS 7 и OpenDOS 7.01 , включая описание многих недокументированных функций и внутренних устройств. Это часть еще более обширной MPDOSTIP.ZIPколлекции автора, поддерживаемой до 2001 года и распространяемой на многих сайтах того времени. Предоставленная ссылка указывает на более старую версию файла, преобразованную в HTML NWDOSTIP.TXT.)
  17. ^ Пол, Матиас Р. (26 марта 2002 г.). «Обновлено CLS». список рассылки freedos-dev. Архивировано из оригинала 27 апреля 2019 г. Проверено 6 августа 2014 г.
  18. ^ Интернет-документация CCI Multiuser DOS 7.22 GOLD . Concurrent Controls, Inc. (CCI). 10 февраля 1997 г. ПОМОЩЬ.HLP.
  19. ^ «Лексическая структура Haskell 98» . Архивировано из оригинала 11 апреля 2021 г. Проверено 1 ноября 2019 г.
  20. ^ OCaml: 7.1 Лексические соглашения. Архивировано 1 июля 2013 г. на archive.today .
  21. ^ Python 3: https://docs.python.org/3.1/reference/lexical_anaанализ.html#integer-literals. Архивировано 20 марта 2014 г. на Wayback Machine.
  22. ^ Perl 6: http://perlcabal.org/syn/S02.html#Radix_markers. Архивировано 31 октября 2014 г. на Wayback Machine.
  23. ^ RubySpec: https://github.com/ruby/ruby/blob/master/spec/ruby/core/string/to_i_spec.rb. Архивировано 29 мая 2022 г. на Wayback Machine.
  24. ^ Tcl: http://wiki.tcl.tk/498. Архивировано 4 января 2014 г. на Wayback Machine.
  25. ^ PHP.Watch - PHP 8.1: явное обозначение восьмеричных чисел https://php.watch/versions/8.1/explicit-octal-notation. Архивировано 8 января 2021 г. на Wayback Machine.
  26. ^ Литералы и операторы Rust: https://doc.rust-lang.org/rust-by-example/primitives/literals.html. Архивировано 28 мая 2022 г. на Wayback Machine.
  27. ^ Черновой вариант ECMAScript 6-го издания: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-numeric-literals. Архивировано 16 декабря 2013 г. в Wayback Machine.
  28. ^ «Почему система счисления для parseInt JavaScript по умолчанию равна 8?». Переполнение стека . 08 апреля 2011 г. Архивировано из оригинала 06 августа 2020 г. Проверено 21 августа 2019 г.
  29. ^ "parseInt()", Mozilla Developer Network (MDN) , заархивировано из оригинала 05 марта 2014 г. , получено 03 января 2014 г. , Если входная строка начинается с "0" (ноль), предполагается, что система счисления равна быть 8 (восьмеричное) или 10 (десятичное). Выбор именно системы счисления зависит от реализации. ECMAScript 5 поясняет, что следует использовать 10 (десятичное число), но пока не все браузеры поддерживают это.

Внешние ссылки