stringtranslate.com

Octal

Octal ( base 8 ) es un sistema de numeración que tiene como base ocho .

En el sistema decimal, cada cifra es una potencia de diez . Por ejemplo:

En el sistema octal, cada cifra es una potencia de ocho. Por ejemplo:

Al realizar el cálculo anterior en el sistema decimal conocido, vemos por qué 112 en octal es igual a en decimal.

Los números octales se pueden convertir fácilmente a partir de representaciones binarias (similares a un sistema de numeración cuaternario ) agrupando dígitos binarios consecutivos en grupos de tres (empezando por la derecha, para los números enteros). Por ejemplo, la representación binaria del decimal 74 es 1001010. Se pueden agregar dos ceros a la izquierda: (00)1 001 010 , correspondientes a los dígitos octales 1 1 2 , lo que da como resultado la representación octal 112.

Uso

En China

Disposición de los ocho trigramas del "Cielo anterior" de Fuxi

Los ocho bagua o trigramas del I Ching corresponden a dígitos octales:

Gottfried Wilhelm Leibniz estableció la conexión entre trigramas, hexagramas y números binarios en 1703. [1]

Por los nativos americanos

Por los europeos

En las computadoras

Octal se empezó a utilizar ampliamente en informática cuando sistemas como UNIVAC 1050 , PDP-8 , ICL 1900 y mainframes de IBM empleaban palabras de 6 , 12 , 24 o 36 bits . Octal era una abreviatura ideal de binario para estas máquinas porque el tamaño de sus palabras es divisible por tres (cada dígito octal representa tres dígitos binarios). De modo que dos, cuatro, ocho o doce dígitos podían mostrar de forma concisa una palabra de máquina completa . También redujo los costes al permitir el uso de tubos Nixie , pantallas de siete segmentos y calculadoras para las consolas de operador, donde las pantallas binarias eran demasiado complejas de usar, las pantallas decimales necesitaban hardware complejo para convertir raíces y las pantallas hexadecimales necesitaban mostrar más números.

Sin embargo, todas las plataformas informáticas modernas utilizan palabras de 16, 32 o 64 bits, divididas a su vez en bytes de ocho bits . En estos sistemas se requerirían tres dígitos octales por byte, y el dígito octal más significativo representaría dos dígitos binarios (más un bit del siguiente byte significativo, si lo hubiera). La representación octal de una palabra de 16 bits requiere 6 dígitos, pero el dígito octal más significativo representa (de manera bastante poco elegante) solo un bit (0 o 1). Esta representación no ofrece ninguna manera de leer fácilmente el byte más significativo, porque está esparcido sobre cuatro dígitos octales. Por lo tanto, el hexadecimal se usa más comúnmente en los lenguajes de programación actuales, ya que dos dígitos hexadecimales especifican exactamente un byte. Algunas plataformas con un tamaño de palabra de potencia de dos aún tienen subpalabras de instrucciones que se entienden más fácilmente si se muestran en octal; esto incluye la familia PDP-11 y Motorola 68000 . La arquitectura x86, omnipresente en la actualidad , también pertenece a esta categoría, pero el octal rara vez se utiliza en esta plataforma, aunque ciertas propiedades de la codificación binaria de los códigos de operación se hacen más evidentes cuando se muestran en octal, por ejemplo, el byte ModRM, que se divide en campos de 2, 3 y 3 bits, por lo que el octal puede ser útil para describir estas codificaciones. Antes de la disponibilidad de los ensambladores , algunos programadores codificaban manualmente los programas en octal; por ejemplo, Dick Whipple y John Arnold escribieron Tiny BASIC Extended directamente en código de máquina, utilizando octal. [11]

En informática, a veces se utiliza el sistema octal en lugar del hexadecimal, quizás más a menudo en la actualidad en relación con los permisos de archivos en sistemas Unix (consulte chmod ). Tiene la ventaja de no requerir símbolos adicionales como dígitos (el sistema hexadecimal es de base 16 y, por lo tanto, necesita seis símbolos adicionales además del 0 al 9).

En los lenguajes de programación, los literales octales se identifican típicamente con una variedad de prefijos , incluyendo el dígito 0, las letras oo q, la combinación dígito-letra 0oo el símbolo &[12] o $. En la convención Motorola , los números octales tienen como prefijo , mientras que una letra @minúscula (o mayúscula [13] ) o[13] o q[13] se agrega como sufijo siguiendo la convención Intel . [14] [15] En Concurrent DOS , Multiuser DOS y REAL/32 así como en DOS Plus y DR-DOS varias variables de entorno como $CLS , $ON , $OFF , $HEADER o $FOOTER admiten una \nnnnotación de números octales, [16] [17] [18] y DR-DOS DEBUG\ también utiliza para prefijar números octales.

Por ejemplo, el literal 73 (base 8) podría representarse como 073, o73, q73, 0o73, \73, @73, &73, $73o 73oen varios idiomas.

Los lenguajes más nuevos han estado abandonando el prefijo 0, ya que los números decimales a menudo se representan con ceros a la izquierda. El prefijo qse introdujo para evitar que el prefijo ose confundiera con un cero, mientras que el prefijo 0ose introdujo para evitar que un literal numérico comenzara con un carácter alfabético (como oo q), ya que estos podrían hacer que el literal se confundiera con un nombre de variable. El prefijo 0otambién sigue el modelo establecido por el prefijo 0xutilizado para literales hexadecimales en el lenguaje C ; Es compatible con Haskell , [19] OCaml , [20] Python a partir de la versión 3.0, [21] Raku , [22] Ruby , [23] Tcl a partir de la versión 9, [24] PHP a partir de la versión 8.1, [25] Rust [26] y ECMAScript a partir de ECMAScript 6 [27] (el prefijo 0originalmente representaba la base 8 en JavaScript pero podía causar confusión, [28] por lo tanto, se desaconsejó en ECMAScript 3 y se eliminó en ECMAScript 5 [29] ).

Números octales que se utilizan en algunos lenguajes de programación (C, Perl , PostScript ...) para representaciones textuales/gráficas de cadenas de bytes cuando algunos valores de bytes (no representados en una página de códigos, no gráficos, que tienen un significado especial en el contexto actual o no deseados por algún otro motivo) deben escaparse como \nnn. La representación octal puede ser particularmente útil con bytes no ASCII de UTF-8 , que codifica grupos de 6 bits, y donde cualquier byte de inicio tiene un valor octal \3nny cualquier byte de continuación tiene un valor octal \2nn.

Octal también se utilizó para punto flotante en las computadoras Ferranti Atlas (1962), Burroughs B5500 (1964), Burroughs B5700 (1971), Burroughs B6700 (1971) y Burroughs B7700 (1972).

En la aviación

Los transpondedores de los aviones transmiten un código de "squawk" , expresado como un número de cuatro dígitos octales, cuando son interrogados por el radar terrestre. Este código se utiliza para distinguir los distintos aviones en la pantalla del radar.

Conversión entre bases

Conversión de decimal a octal

Método de división euclidiana sucesiva por 8

Para convertir decimales enteras a octales, se divide el número original por la mayor potencia de 8 posible y se dividen los restos por potencias de 8 sucesivamente menores hasta que la potencia sea 1. La representación octal se forma con los cocientes, escritos en el orden generado por el algoritmo. Por ejemplo, para convertir 125 10 a octal:

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

Por lo tanto, 125 10 = 175 8 .

Otro ejemplo:

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

Por lo tanto, 900 10 = 1604 8 .

Método de multiplicación sucesiva por 8

Para convertir una fracción decimal en octal, multiplique por 8; la parte entera del resultado es el primer dígito de la fracción octal. Repita el proceso con la parte fraccionaria del resultado hasta que sea nula o se encuentre dentro de los límites de error aceptables.

Ejemplo: Convertir 0,1640625 a octal:

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

Por lo tanto, 0,1640625 10 = 0,124 8 .

Estos dos métodos se pueden combinar para manejar números decimales con partes enteras y fraccionarias, utilizando el primero en la parte entera y el segundo en la parte fraccionaria.

Método de duplicación sucesiva

Para convertir decimales enteras a octales, anteponga el número con "0". Realice los siguientes pasos mientras queden dígitos en el lado derecho de la base: duplique el valor hacia el lado izquierdo de la base, utilizando las reglas octales , mueva el punto de la base un dígito hacia la derecha y luego coloque el valor duplicado debajo del valor actual de modo que los puntos de la base se alineen. Si el punto de la base movido cruza un dígito que es 8 o 9, conviértalo en 0 o 1 y agregue el acarreo al siguiente dígito hacia la izquierda del valor actual. Agregue octalmente esos dígitos a la izquierda de la base y simplemente baje esos dígitos hacia la derecha, sin modificación.

Ejemplo:

0,4 9 1 8 valor decimal +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. valor octal

Conversión de octal a decimal

Para convertir un número k a decimal, utilice la fórmula que define su representación en base 8:

En esta fórmula, a i es un dígito octal individual que se está convirtiendo, donde i es la posición del dígito (contando desde 0 para el dígito más a la derecha).

Ejemplo: Convertir 764 8 a decimal:

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

Para números octales de dos dígitos, este método equivale a multiplicar el dígito principal por 8 y sumar el segundo dígito para obtener el total.

Ejemplo: 65 8 = 6 × 8 + 5 = 53 10

Método de duplicación sucesiva

Para convertir octales a decimales, anteponga el número con "0". Realice los siguientes pasos mientras queden dígitos en el lado derecho de la base: duplique el valor hacia el lado izquierdo de la base, utilizando reglas decimales , mueva el punto de la base un dígito hacia la derecha y luego coloque el valor duplicado debajo del valor actual de modo que los puntos de la base se alineen. Reste decimalmente esos dígitos a la izquierda de la base y simplemente baje esos dígitos hacia la derecha, sin modificación.

Ejemplo:

0,1 1 4 6 6 valor octal -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. valor decimal

Conversión de octal a binario

Para convertir octal a binario, reemplace cada dígito octal por su representación binaria.

Ejemplo: Convertir 51 8 a binario:

5 8 = 101 2
1 8 = 001 2

Por lo tanto, 51 8 = 101 001 2 .

Conversión de binario a octal

El proceso es el inverso del algoritmo anterior. Los dígitos binarios se agrupan de tres en tres, comenzando por el bit menos significativo y avanzando hacia la izquierda y hacia la derecha. Si es necesario, se añaden ceros a la izquierda (o ceros a la derecha del punto decimal) para completar el último grupo de tres. Luego, se reemplaza cada trío con el dígito octal equivalente.

Por ejemplo, convertir binario 1010111100 a octal:

Por lo tanto, 1010111100 2 = 1274 8 .

Convertir binario 11100.01001 a octal:

Por lo tanto, 11100.01001 2 = 34.22 8 .

Conversión de octal a hexadecimal

La conversión se realiza en dos pasos utilizando el binario como base intermedia. Se convierte de octal a binario y luego de binario a hexadecimal, agrupando los dígitos de cuatro en cuatro, que corresponden cada uno a un dígito hexadecimal.

Por ejemplo, convertir octal 1057 a hexadecimal:

A binario:
luego a hexadecimal:

Por lo tanto, 1057 8 = 22F 16 .

Conversión de hexadecimal a octal

La conversión de hexadecimal a octal se realiza convirtiendo primero los dígitos hexadecimales en valores binarios de 4 bits y luego reagrupando los bits binarios en dígitos octales de 3 bits.

Por ejemplo, para convertir 3FA5 16 :

A binario:
luego a octal:

Por lo tanto, 3FA5 16 = 37645 8 .

Números reales

Fracciones

Debido a que solo tienen factores de dos, muchas fracciones octales tienen dígitos repetidos, aunque estos tienden a ser bastante simples:

Números irracionales

La siguiente tabla muestra las expansiones de algunos números irracionales comunes en decimal y octal.

Véase también

Referencias

  1. ^ Leibniz, Gottfried Wilhelm (1703). «Explicación de la aritmética binaria». leibniz-translations.com . Archivado desde el original el 2021-02-11 . Consultado el 2022-03-02 .
  2. ^ Ascher, Marcia (1992). "Etnomatemáticas: una visión multicultural de las ideas matemáticas". The College Mathematics Journal . 23 (4): 353–355. doi :10.2307/2686959. JSTOR  2686959.
  3. ^ Avelino, Heriberto (2006). "La tipología de los sistemas numéricos pames y los límites de Mesoamérica como área lingüística" (PDF) . Tipología lingüística . 10 (1): 41–60. doi :10.1515/LINGTY.2006.002. S2CID  20412558. Archivado (PDF) desde el original el 2011-06-04 . Consultado el 2007-11-21 .
  4. ^ Winter, Werner (1991). "Algunas reflexiones sobre los numerales indoeuropeos". En Gvozdanović, Jadranka (ed.). Numerales indoeuropeos . Tendencias en lingüística. Vol. 57. Berlín: Mouton de Gruyter. págs. 13-14. ISBN 3-11-011322-8Archivado desde el original el 1 de abril de 2023. Consultado el 9 de junio de 2013 .
  5. ^ Wilkins, John (1668). Un ensayo sobre un personaje real y un lenguaje filosófico. Londres. pág. 190. Archivado desde el original el 2023-04-01 . Consultado el 2015-02-08 .
  6. ^ Donald Knuth , El arte de la programación informática
  7. ^ Véase HR Phalen, "Hugh Jones y el cálculo de octavas", The American Mathematical Monthly 56 (agosto-septiembre de 1949): 461-465.
  8. ^ James Anderson, On Octal Arithmetic [el título aparece solo en los encabezados de página], Recreations in Agriculture, Natural-History, Arts, and Miscellaneous Literature Archivado el 1 de abril de 2023 en Wayback Machine , Vol. IV, No. 6 (febrero de 1801), T. Bensley, Londres; páginas 437-448.
  9. ^ Alfred B. Taylor, Informe sobre pesos y medidas, Asociación farmacéutica, 8.ª sesión anual, Boston, 15 de septiembre de 1859. Véanse las páginas 48 y 53.
  10. ^ Alfred B. Taylor, Numeración octogonal y su aplicación a un sistema de pesos y medidas, Proc. Amer. Phil. Soc. Vol XXIV Archivado el 1 de abril de 2023 en Wayback Machine , Filadelfia, 1887; páginas 296-366. Véanse las páginas 327 y 330.
  11. ^ "Hoja de código TB". Revista de calistenia y ortodoncia informática del Dr. Dobb, Running Light Without Overbyte . 1 (1). Diciembre de 1975.
  12. ^ Microsoft Corporation (1987). «Constantes, variables, expresiones y operadores». Manual del usuario de GW-BASIC. Archivado desde el original el 5 de enero de 2016. Consultado el 12 de diciembre de 2015 .
  13. ^ abc "2.4.1 Constantes numéricas". CP/M-86 - Sistema operativo - Guía del programador (PDF) (3.ª ed.). Pacific Grove, California, EE. UU.: Digital Research . Enero de 1983 [1981]. pág. 9. Archivado (PDF) desde el original el 27 de febrero de 2020 . Consultado el 27 de febrero de 2020 .[1] (1+viii+122+2 páginas)
  14. ^ Küveler, Gerd; Schwoch, Dietrich (2013) [1996]. Arbeitsbuch Informatik - eine praxisorientierte Einführung in die Datenverarbeitung mit Projektaufgabe (en alemán). Vieweg-Verlag, reimpresión: Springer-Verlag. doi :10.1007/978-3-322-92907-5. ISBN 978-3-528-04952-2. 978-3-32292907-5. Archivado desde el original el 1 de abril de 2023. Consultado el 5 de agosto de 2015 .
  15. ^ Küveler, Gerd; Schwoch, Dietrich (4 de octubre de 2007). Informatik für Ingenieure und Naturwissenschaftler: PC- und Mikrocomputertechnik, Rechnernetze (en alemán). vol. 2 (5 ed.). Vieweg, reimpresión: Springer-Verlag. ISBN 978-3-83489191-4. 978-3-83489191-4. Archivado desde el original el 1 de abril de 2023. Consultado el 5 de agosto de 2015 .
  16. ^ Paul, Matías R. (30 de julio de 1997). "NWDOS-TIP: consejos y trucos para Novell DOS 7, con Blick auf desdokumentierte detalles, errores y soluciones". MPDOSTIP . Versión 157 (en alemán) (3 ed.). Archivado desde el original el 4 de noviembre de 2016 . Consultado el 6 de agosto de 2014 .(NB. NWDOSTIP.TXT es un trabajo exhaustivo sobre Novell DOS 7 y OpenDOS 7.01 , que incluye la descripción de muchas características y componentes internos no documentados. Es parte de la MPDOSTIP.ZIPcolección aún más grande del autor, mantenida hasta 2001 y distribuida en muchos sitios en ese momento. El enlace provisto apunta a una versión anterior del NWDOSTIP.TXTarchivo convertida a HTML).
  17. ^ Paul, Matthias R. (26 de marzo de 2002). "CLS actualizado publicado". Lista de correo freedos-dev. Archivado desde el original el 27 de abril de 2019. Consultado el 6 de agosto de 2014 .
  18. ^ Documentación en línea de CCI Multiuser DOS 7.22 GOLD . Concurrent Controls, Inc. (CCI). 10 de febrero de 1997. HELP.HLP.
  19. ^ "Estructura léxica de Haskell 98". Archivado desde el original el 2021-04-11 . Consultado el 2019-11-01 .
  20. ^ OCaml: 7.1 Convenciones léxicas Archivado el 1 de julio de 2013 en archive.today
  21. ^ Python 3: https://docs.python.org/3.1/reference/lexical_analysis.html#integer-literals Archivado el 20 de marzo de 2014 en Wayback Machine
  22. ^ Perl 6: http://perlcabal.org/syn/S02.html#Radix_markers Archivado el 31 de octubre de 2014 en Wayback Machine.
  23. ^ RubySpec: https://github.com/ruby/ruby/blob/master/spec/ruby/core/string/to_i_spec.rb Archivado el 29 de mayo de 2022 en Wayback Machine.
  24. ^ Tcl: http://wiki.tcl.tk/498 Archivado el 4 de enero de 2014 en Wayback Machine.
  25. ^ PHP.Watch - PHP 8.1: Notación numérica octal explícita https://php.watch/versions/8.1/explicit-octal-notation Archivado el 8 de enero de 2021 en Wayback Machine
  26. ^ Literales y operadores de Rust: https://doc.rust-lang.org/rust-by-example/primitives/literals.html Archivado el 28 de mayo de 2022 en Wayback Machine.
  27. ^ Borrador de ECMAScript 6.ª edición: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-numeric-literals Archivado el 16 de diciembre de 2013 en Wayback Machine.
  28. ^ "¿Por qué el valor predeterminado del radix de parseInt de JavaScript es 8?". Stack Overflow . 2011-04-08. Archivado desde el original el 2020-08-06 . Consultado el 2019-08-21 .
  29. ^ "parseInt()", Mozilla Developer Network (MDN) , archivado desde el original el 5 de marzo de 2014 , consultado el 3 de enero de 2014. Si la cadena de entrada comienza con "0" (un cero) , se supone que el valor de base es 8 (octal) o 10 (decimal). El valor de base exacto que se elija depende de la implementación. ECMAScript 5 aclara que se debe utilizar 10 (decimal), pero no todos los navegadores lo admiten todavía.

Enlaces externos