Por que os números hexadecimais são prefixados como 0x
? Entendo o uso do prefixo, mas não entendo o significado do motivo da 0x
escolha.
Por que os números hexadecimais são prefixados como 0x
? Entendo o uso do prefixo, mas não entendo o significado do motivo da 0x
escolha.
Respostas:
Breve história: O 0
diz ao analisador que está lidando com uma constante (e não um identificador / palavra reservada). Ainda é necessário algo para especificar a base numérica: x
é uma escolha arbitrária.
Longa história: Nos anos 60, os sistemas de números de programação predominantes eram decimais e octais - os mainframes tinham 12, 24 ou 36 bits por byte, o que é bem divisível por 3 = log2 (8).
A linguagem BCPL usou a sintaxe 8 1234
para números octais. Quando Ken Thompson criou B a partir do BCPL, ele usou o 0
prefixo. Isso é ótimo porque
0
é o mesmo nas duas bases),00005 == 05
) e#123
).Quando C foi criado a partir de B, surgiu a necessidade de números hexadecimais (o PDP-11 tinha palavras de 16 bits) e todos os pontos acima ainda eram válidos. Como os octais ainda eram necessários para outras máquinas, 0x
foi escolhido arbitrariamente ( 00
provavelmente foi descartado como estranho).
C # é um descendente de C, portanto herda a sintaxe.
0x
mais 00
estava preferência / constrangimento. 00
quebraria o código existente. 0010
como octal é 8
, enquanto 0010
hexadecimal seria 16
. Eles não podiam usar nenhum número como um indicador de segundo dígito (exceto 8
ou 9
, e nenhum possui qualquer significado relacionado ao hexidecimal), portanto, uma letra é obrigatória. E isso deixa um 0h
ou 0x
( H e X idecimal). A partir deste ponto, parece que realmente está de volta à preferência.
0
prefixo para octal causou muitos problemas ao longo dos anos. Especialmente em países como o Reino Unido, onde os números de telefone começam com a 0
. Javascript e muitos outros idiomas os analisariam como octal, confundindo o número antes de armazenar. Para aumentar a diversão, um produto popular de banco de dados mudaria silenciosamente para a análise decimal se o número contivesse um 8
ou 9
.
Nota: Não sei a resposta correta, mas a seguir é apenas minha especulação pessoal!
Como foi mencionado, um 0 antes de um número significa que é octal:
04524 // octal, leading 0
Imagine precisar criar um sistema para indicar números hexadecimais e observe que estamos trabalhando em um ambiente de estilo C. Que tal terminar com h como montagem? Infelizmente você não pode - isso permitiria criar tokens que são identificadores válidos (por exemplo, você poderia nomear uma variável da mesma coisa), o que resultaria em algumas ambiguidades desagradáveis.
8000h // hex
FF00h // oops - valid identifier! Hex or a variable or type named FF00h?
Você não pode liderar com um personagem pelo mesmo motivo:
xFF00 // also valid identifier
O uso de um hash provavelmente foi descartado porque entra em conflito com o pré-processador:
#define ...
#FF00 // invalid preprocessor token?
No final, por qualquer motivo, eles decidiram colocar um x depois de um 0 inicial para indicar hexadecimal. É inequívoco, pois ainda começa com um caractere numérico, portanto, não pode ser um identificador válido e provavelmente se baseia na convenção octal de um 0 inicial.
0xFF00 // definitely not an identifier!
0xFFAB1234
deve ser escrito como 0FFAB1234h
. Lembro-me de asm em linha em Pascal quando eu era jovem stackoverflow.com/q/11733731/995714
É um prefixo para indicar que o número está em hexadecimal e não em outra base. A linguagem de programação C usa-a para informar ao compilador.
Exemplo:
0x6400
traduz para 6*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600.
Quando o compilador lê 0x6400
, ele entende que o número é hexadecimal com a ajuda do termo 0x . Geralmente podemos entender por (6400) 16 ou (6400) 8 ou o que for ..
Para binário , seria:
0b00000001
Espero ter ajudado de alguma forma.
Dia bom!
x6400
? O x
ainda pode ser usado para inferir hexadecimal.
O 0 anterior é usado para indicar um número na base 2, 8 ou 16.
Na minha opinião, 0x foi escolhido para indicar hexadecimal porque 'x' soa como hexadecimal.
Apenas minha opinião, mas acho que faz sentido.
Dia bom!