Octal ( base 8 ) es un sistema numérico con ocho como base .
En el sistema decimal, cada lugar es una potencia de diez . Por ejemplo:
En el sistema octal, cada lugar es una potencia de ocho. Por ejemplo:
Al realizar el cálculo anterior en el conocido sistema decimal, 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 (similar a un sistema de numeración cuaternario ) agrupando dígitos binarios consecutivos en grupos de tres (comenzando 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 , correspondiente a los dígitos octales 1 1 2 , lo que produce la representación octal 112.
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]
Octal se utilizó ampliamente en informática cuando sistemas como UNIVAC 1050 , PDP-8 , ICL 1900 y mainframes 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). Por lo tanto, dos, cuatro, ocho o doce dígitos podrían mostrar de manera concisa una palabra de máquina completa . También redujo costos al permitir que se usaran tubos Nixie , pantallas de siete segmentos y calculadoras para las consolas del operador, donde las pantallas binarias eran demasiado complejas de usar, las pantallas decimales necesitaban hardware complejo para convertir radices 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 tales sistemas se necesitarí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) sólo un bit (0 o 1). Esta representación no ofrece ninguna manera de leer fácilmente el byte más significativo, porque está manchado en 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 todavía tienen subpalabras de instrucción que se entienden más fácilmente si se muestran en octal; esto incluye la familia PDP-11 y Motorola 68000 . La omnipresente arquitectura x86 de hoy en día también pertenece a esta categoría, pero rara vez se utiliza octal en esta plataforma, aunque ciertas propiedades de la codificación binaria de códigos de operación se vuelven 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 octal puede resultar útil para describir estas codificaciones. Antes de la disponibilidad de ensambladores , algunos programadores codificaban manualmente los programas en octal; por ejemplo, Dick Whipple y John Arnold escribieron Tiny BASIC Extended directamente en código máquina, usando octal. [11]
A veces se utiliza octal en informática en lugar de hexadecimal, quizás con mayor frecuencia en los tiempos modernos junto con permisos de archivos en sistemas Unix (consulte chmod ). Tiene la ventaja de no requerir ningún símbolo adicional como dígitos (el sistema hexadecimal es de base 16 y, por lo tanto, necesita seis símbolos adicionales más allá del 0 al 9). También se utiliza para pantallas digitales.
En los lenguajes de programación, los literales octales generalmente se identifican con una variedad de prefijos , incluido el dígito 0
, las letras o
o q
, la combinación dígito-letra 0o
o el símbolo &
[12] o $
. En la convención de Motorola , los números octales tienen el prefijo @
, mientras que una letra minúscula (o mayúscula [13] ) o
[13] o q
[13] se agrega como sufijo siguiendo la convención de Intel . [14] [15] En DOS concurrente , DOS multiusuario y REAL/32 , así como en DOS Plus y DR-DOS, varias variables de entorno como $CLS , $ON , $OFF , $HEADER o $FOOTER admiten una \nnn
notación numérica octal, [16] [17] [18] y DR-DOS DEBUG\
también se utiliza para anteponer números octales.
Por ejemplo, el literal 73 (base 8) podría representarse como 073
, o73
, q73
, 0o73
, \73
, @73
, &73
o $73
en 73o
varios idiomas.
Los idiomas más nuevos han ido abandonando el prefijo 0
, ya que los números decimales a menudo se representan con ceros a la izquierda. El prefijo q
se introdujo para evitar que o
se confundiera con un cero, mientras que el prefijo 0o
se introdujo para evitar comenzar un literal numérico con un carácter alfabético (como o
o q
), ya que estos podrían causar que el literal se confunda con un nombre de variable. El prefijo 0o
también sigue el modelo establecido por el prefijo 0x
utilizado para los 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 0
originalmente representaba la base 8 en JavaScript pero podrí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 de otro modo) no deseado) debe 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 valor octal \3nn
y cualquier byte de continuación tiene valor octal \2nn
.
Octal también se utilizó para coma flotante en las computadoras Ferranti Atlas (1962), Burroughs B5500 (1964), Burroughs B5700 (1971), Burroughs B6700 (1971) y Burroughs B7700 (1972).
Los transpondedores de los aviones transmiten un código de "graznido" , expresado como un número de cuatro dígitos octales, cuando son interrogados por un radar terrestre. Este código se utiliza para distinguir diferentes aeronaves en la pantalla del radar.
Para convertir decimales enteros a octal, divida el número original por la mayor potencia posible de 8 y divida los restos por potencias sucesivamente menores de 8 hasta que la potencia sea 1. La representación octal está formada por los cocientes, escritos en el orden generado por el algoritmo. Por ejemplo, para convertir 125 10 a octal:
Por lo tanto, 125 10 = 175 8 .
Otro ejemplo:
Por lo tanto, 900 10 = 1604 8 .
Para convertir una fracción decimal a octal, multiplica 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 nulo o esté dentro de límites de error aceptables.
Ejemplo: convertir 0,1640625 a octal:
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, usando el primero en la parte entera y el segundo en la parte fraccionaria.
Para convertir decimales enteros a octal, anteponga el número "0". Realice los siguientes pasos mientras los dígitos permanezcan en el lado derecho de la base: Duplique el valor hacia el lado izquierdo de la base, usando reglas octales , mueva el punto de la base un dígito hacia la derecha y luego coloque el valor duplicado debajo del valor actual. valor para que los puntos de la base se alineen. Si el punto de base movido cruza un dígito que es 8 o 9, conviértalo a 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 a la derecha, sin modificaciones.
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
Para convertir un número k a decimal, use 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:
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
Para convertir octales a decimales, anteponga el número "0". Realice los siguientes pasos mientras los dígitos permanezcan en el lado derecho de la base: Duplique el valor hacia el lado izquierdo de la base, usando reglas decimales , mueva el punto de la base un dígito hacia la derecha y luego coloque el valor duplicado debajo del valor actual. valor para que los puntos de la base se alineen. Resta decimalmente esos dígitos a la izquierda de la base y simplemente baja esos dígitos a la derecha, sin modificaciones.
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
Para convertir octal a binario, reemplace cada dígito octal por su representación binaria.
Ejemplo: convertir 51 8 a binario:
Por lo tanto, 51 8 = 101 001 2 .
El proceso es el inverso del algoritmo anterior. Los dígitos binarios se agrupan de tres en tres, comenzando desde el bit menos significativo y avanzando hacia la izquierda y hacia la derecha. Agregue ceros a la izquierda (o ceros a la derecha del punto decimal) para completar el último grupo de tres si es necesario. Luego reemplaza cada trío con el dígito octal equivalente.
Por ejemplo, convierta el 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 .
La conversión se realiza en dos pasos utilizando el binario como base intermedia. Octal se convierte 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, convierta octal 1057 a hexadecimal:
Por lo tanto, 1057 8 = 22F 16 .
La conversión de hexadecimal a octal se realiza convirtiendo primero los dígitos hexadecimales a valores binarios de 4 bits y luego reagrupando los bits binarios en dígitos octales de 3 bits.
Por ejemplo, para convertir 3FA5 16 :
Por lo tanto, 3FA5 16 = 37645 8 .
Debido a que solo tienen factores de dos, muchas fracciones octales tienen dígitos repetidos, aunque tienden a ser bastante simples:
La siguiente tabla muestra las expansiones de algunos números irracionales comunes en decimal y octal.
MPDOSTIP.ZIP
colección aún más grande del autor mantenida hasta 2001 y distribuida en muchos sitios en ese momento. El enlace proporcionado apunta a una versión anterior del NWDOSTIP.TXT
archivo convertida a HTML).si la cadena de entrada comienza con "0" (un cero), se supone que la base es ser 8 (octal) o 10 (decimal). La base exacta que se elige depende de la implementación. ECMAScript 5 aclara que se debe utilizar 10 (decimal), pero no todos los navegadores lo admiten todavía