Para que são utilizados os números octais (base 8)?

11

Java fornece maneiras de escrever literais numéricos nas bases 2, 8, 10 e 16.

Gostaria de saber por que a base 8 está incluída, por exemplo int x = 0123;?

Eu estou pensando que pode haver algo semelhante ao fato de que em hexadecimal a capacidade de um byte é FF + 1 , e assim por diante.

jokinjo
fonte
7
Acredito que sua pergunta é "Para que são usados ​​os números octais?"
GetMeARemoteJob
Sim, é assim que eu deveria ter formulado a pergunta. Obrigado por todas as respostas interessantes. Eu pensei que poderia ter uma base histórica, mas não tive a experiência necessária para colocar um dedo nela.
Jokinjo 28/10/19

Respostas:

16

Esta resposta foi escrita para a pergunta original: "Por que escrever um número na base 8 é útil?"

Era para tornar a linguagem familiar àqueles que conheciam C etc. Então a questão é por que apoiá-la naqueles!

Havia arquiteturas (vários PDPs) que usavam palavras com 18 bits de largura (e outras usavam palavras de 36 bits); portanto, literais em que o dígito tem 3 bits de largura seriam úteis.

Na prática, o único lugar em que eu o vi usado no código Java é para especificar permissões no estilo unix, por exemplo 0777,0644 etc.

(A resposta explícita do motivo pelo qual é suportada é "obter votos positivos sobre esta questão ").

Andy Turner
fonte
Oh, bom ponto, esqueci as permissões de arquivo no Linux! O uso mínimo de bits disponíveis ... octal se encaixa na conta.
28419 Sarlacii
11
@sarlacii "uso mínimo" não tem nada a ver com isso, o "octal" -ness de um int literal só existe no código-fonte. É simplesmente mais fácil obter as permissões indicadas por um literal octal, porque os dígitos correspondem diretamente ao usuário, grupo e outros.
Andy Turner
Fiz minha primeira programação em um computador mainframe com palavras de 60 bits e conjunto de caracteres de 6 bits. Os endereços eram 18 bits. Claro que usamos octal. Quando conheci o hexadecimal, era bastante peculiar ver letras em um número.
Ole VV
@ Andy ainda penso nisso como uso mínimo ... a escolha do tamanho do bit não é apenas relacionada ao código. Também é limitado pelo recurso. por exemplo. Eu poderia optar por usar 8 bits para codificar cada permissão, mascarando os bits não usados, exigindo 3 bytes, ou melhor, usar o mínimo de 3 bits e depois codificar números octais, para usar apenas 1 e meio de bytes (usando o 4º tão pegajoso). Mas sim, é arbitrário quando você passa para o nível de bit ... pois você pode ler o valor octal combinado como hex de qualquer maneira.
sarlacii
7

"Os números octais não são tão comuns como costumavam ser. No entanto, o Octal é usado quando o número de bits em uma palavra é múltiplo de 3. Ele também é usado como atalho para representar permissões de arquivo em sistemas UNIX e representar Números UTF8 etc. "

De: https://www.tutorialspoint.com/octal-number-system

yur
fonte
3
Não é realmente "número de bits em uma palavra" - como era usado em minicomputadores de 16 bits na forma de um número alto de 0/1 e, em seguida, de 5 octal. Uma descrição melhor pode ser: Usado quando o tamanho de um campo em uma palavra é múltiplo de 8 bits. Esses mesmos computadores tinham (freqüentemente) 8 registros - portanto, um registro especificado em uma instrução teria um campo de 3 bits para nomear um registro, uma instrução de registro para registro teria dois campos de 3 bits; esses mesmos computadores frequentemente tinham um código de operação de 3 bits ou um código de operação de 3 bits com um "escape" (por exemplo, 0111) para um código de operação de 6 bits ; etc etc
davidbak 28/10/19
4

História do computador (ciência). Para representar um grupo de bits, uma base 10 não se encaixa, base 8 = 2 3 por 3 bits e base 16 = 2 4 para 4 bits se encaixa melhor.

A vantagem da base 8 é que todos os dígitos são realmente dígitos: 0-7, enquanto a base 16 tem "dígitos" 0-9A-F.

Para 8 bits de uma base de bytes 16 (hexadecimal), cabe melhor e ganha. Para Unix base 8 octal, muitas vezes ainda é usado pararwx bits (leitura, gravação, execução) para usuário, grupo e outros; portanto, números octais como 0666 ou 0777.

Hexadecimal é onipresente, principalmente porque o tamanho das palavras dos computadores atualmente é de vários bytes. O fato de o 8 bits bytese tornar um padrão é outra história difícil e relacionada (2 3 bits e endereçamento).

Joop Eggen
fonte
0

Resposta original para "Para que são utilizados os números octais (base 8)?"

Uso comum do Octal

  • Como abreviação de binário: Para máquinas de computação (como UNIVAC 1050, PDP-8, ICL 1900 etc.), o Octal foi usado como uma abreviação de binário porque o tamanho da palavra é divisível por três (cada dígito octal representa três dígitos binários). dígitos). Assim, dois, quatro, oito ou doze dígitos poderiam exibir concisa uma palavra de máquina inteira. Também reduziu os custos ao permitir que os tubos Nixie, telas de sete segmentos e calculadoras fossem usadas para os consoles do operador, onde as telas binárias eram complexas demais para serem usadas, as telas decimais precisavam de hardware complexo para converter as radições e as telas hexadecimais necessárias para exibir mais números .

  • Representação de palavras de 16, 32 ou 62 bits:Todas as plataformas de computação modernas usam palavras de 16, 32 ou 64 bits, divididas em bytes de oito bits. Em tais sistemas, seriam necessários três dígitos octais por byte, com o dígito octal mais significativo representando dois dígitos binários (mais um bit do próximo byte significativo, se houver). A representação octal de uma palavra de 16 bits requer 6 dígitos, mas o dígito octal mais significativo representa (de maneira bastante deselegante) apenas um bit (0 ou 1). Essa representação não oferece nenhuma maneira de ler facilmente o byte mais significativo, porque está manchado em quatro dígitos octais. Portanto, hoje em dia, o hexadecimal é mais comumente usado em linguagens de programação, pois dois dígitos hexadecimais especificam exatamente um byte. Algumas plataformas com tamanho de duas palavras ainda possuem subpalavras de instruções que são mais facilmente compreendidas se exibidas em octal; isso inclui a família PDP-11 e Motorola 68000. A arquitetura onipresente x86 moderna também pertence a essa categoria, mas o octal raramente é usado nessa plataforma.

  • Descrições de codificação: Certas propriedades da codificação binária de opcodes na arquitetura moderna x86 se tornam mais aparentes quando exibidas em octal, por exemplo, o byte ModRM, dividido em campos de 2, 3 e 3 bits, para que octal possa ser útil na descrição. essas codificações.

  • Permissões de acesso a arquivos e cálculos: Octal às vezes é usado na computação em vez de hexadecimal, talvez com mais frequência nos tempos modernos em conjunto com permissões de arquivo em sistemas Unix (acesso de permissão ao chmod). Tem a vantagem de não exigir símbolos extras como dígitos (o sistema hexadecimal é base 16 e, portanto, precisa de seis símbolos adicionais além de 0 a 9).

  • Telas digitais: os números octais também são usados ​​na exibição de conteúdo digital em uma tela, pois possui menos número de símbolos usados ​​para representação.

  • Representação gráfica de cadeias de bytes: Algumas linguagens de programação (C, Perl, Postscript etc.) têm uma representação de textos / gráficos no Octal com escape como \ nnn. A representação octal é particularmente útil com bytes não ASCII de UTF-8, que codificam grupos de 6 bits e onde qualquer byte inicial possui valor octal \ 3nn e qualquer byte de continuação possui valor octal \ 2nn.

  • Aritmética inicial de ponto flutuante: O Octal também era usado para ponto flutuante nos computadores do Atlas Ferranti (1962), Burroughs B5500 (1964), Burroughs B5700 (1971), Burroughs B6700 (1971) e Burroughs B7700 (1972).

  • Em transponders: as aeronaves transmitem um código, expresso como um número de quatro dígitos octais quando interrogado por radar no solo. Este código é usado para distinguir diferentes aeronaves na tela do radar.

Leituras adicionais: https://en.wikipedia.org/wiki/Octal

Jishan Shaikh
fonte
11
Eu gostei de ler a entrada da Wikipedia, especialmente sobre como usar os espaços entre os dedos para contar. No entanto, na maioria das vezes, pode-se dizer que o artigo é o impulso da minha pergunta. Como eu suspeitava, a indivisibilidade dos tamanhos de palavras usados ​​na arquitetura atual dos computadores torna a representação octal inútil, e um dos parágrafos que você cita como "palavras de 16, 32, 64 bits ..." não está claro. Poderia explicar como “o byte mais significativo é manchada mais de quatro dígitos octais” e “Algumas plataformas com uma potência de dois tamanho da palavra ainda tem subpalavras de instrução ...”
jokinjo