Por que os números hexadecimais são prefixados com 0x?

Por que os números hexadecimais são prefixados como 0x ? Eu entendo o uso do prefixo, mas não entendo o significado de por que 0x foi escolhido.

Breve história: O 0 diz ao analisador que está lidando com uma constante (e não com um identificador / palavra reservada). Algo ainda é necessário para especificar a base numérica: o x é uma escolha arbitrária.

Longa história: Nos anos 60, os sistemas de números de programação predominantes eram decimais e os octal – mainframes tinham 12, 24 ou 36 bits por byte, o que é bastante divisível por 3 = log2 (8).

A linguagem BCPL usou a syntax 8 1234 para números octal. Quando Ken Thompson criou o B do BCPL, ele usou o prefixo 0 lugar. Isso é ótimo porque

  1. uma constante inteira agora sempre consiste em um único token,
  2. o parser ainda pode dizer imediatamente que tem uma constante,
  3. o analisador pode informar imediatamente a base ( 0 é o mesmo em ambas as bases),
  4. é matematicamente são ( 00005 == 05 ), e
  5. nenhum caractere especial precioso é necessário (como em #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 octals ainda eram necessários para outras máquinas, 0x foi arbitrariamente escolhido ( 00 foi provavelmente descartado como estranho).

C # é um descendente de C, portanto, herda a syntax.

Nota: Eu não sei a resposta correta, mas o abaixo é apenas minha especulação pessoal!

Como já foi mencionado, um 0 antes de um número significa que é octal:

 04524 // octal, leading 0 

Imagine a necessidade de criar um sistema para denotar números hexadecimais e observe que estamos trabalhando em um ambiente de estilo C. Que tal terminar com h como assembly? Infelizmente você não pode – isso permitiria que você criasse símbolos que são identificadores válidos (por exemplo, você poderia nomear uma variável da mesma forma), o que tornaria 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 

Usar 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 à esquerda para denotar hexadecimal. Não é ambíguo, pois ainda começa com um caractere numérico, portanto, não pode ser um identificador válido e, provavelmente, é baseado na convenção octal de um 0 inicial.

 0xFF00 // definitely not an identifier! 

SIMPLES

É um prefixo para indicar que o número está em hexadecimal e não em alguma outra base. A linguagem de programação C usa isso para dizer ao compilador.

Exemplo:

0x6400 traduz em 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 . Normalmente, podemos entender por (6400) 16 ou (6400) 8 ou qualquer outra coisa ..

Para binário será

0b00000001

Esperança Ajudou de alguma forma.

Bom dia

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!