¿Por qué los números hexadecimales tienen el prefijo 0x
? Entiendo el uso del prefijo pero no entiendo la importancia de por qué 0x
fue elegido.
¿Por qué los números hexadecimales tienen el prefijo 0x
? Entiendo el uso del prefijo pero no entiendo la importancia de por qué 0x
fue elegido.
Respuestas:
En pocas palabras: El 0
le dice al analizador se trata de una constante (y no un / palabra reservada identificador). Todavía se necesita algo para especificar la base numérica: x
es una elección arbitraria.
Larga historia: en los años 60, los sistemas numéricos de programación predominantes eran decimales y octales : los mainframes tenían 12, 24 o 36 bits por byte, que es muy divisible por 3 = log2 (8).
El lenguaje BCPL utilizó la sintaxis 8 1234
para los números octales. Cuando Ken Thompson creó B de BCPL, usó el 0
prefijo en su lugar. Esto es genial porque
0
es lo mismo en ambas bases),00005 == 05
), y#123
).Cuando C se creó a partir de B, surgió la necesidad de números hexadecimales (el PDP-11 tenía palabras de 16 bits) y todos los puntos anteriores aún eran válidos. Como todavía se necesitaban octales para otras máquinas, 0x
se eligió arbitrariamente ( 00
probablemente se descartó como incómodo).
C # es un descendiente de C, por lo que hereda la sintaxis.
0x
en la 00
preferencia / incomodidad. 00
rompería el código existente. 0010
como octal es 8
, mientras que 0010
como hexadecimal sería 16
. No podían usar ningún número como indicador de segundo dígito (excepto 8
o 9
, y ninguno de los dos tiene ningún significado relacionado con hexadecimal), por lo que una letra es imprescindible. Y eso deja ya sea 0h
o 0x
( H e X idecimal). Desde este punto parece que realmente ha vuelto a la preferencia.
0
prefijo para octal ha causado muchos problemas a lo largo de los años. Especialmente en países como el Reino Unido, donde los números de teléfono comienzan con a 0
. Javascript y muchos otros lenguajes los analizarían como octal, destrozando el número antes de almacenarlo. Para agregar a la diversión, un producto de base de datos popular volvería silenciosamente al análisis decimal si el número contuviera un 8
o 9
.
Nota: No sé la respuesta correcta, ¡pero la siguiente es solo mi especulación personal!
Como se ha mencionado un 0 antes de un número significa que es octal:
04524 // octal, leading 0
Imagine la necesidad de crear un sistema para denotar números hexadecimales, y tenga en cuenta que estamos trabajando en un entorno de estilo C. ¿Qué tal terminar con h como ensamblaje? Desafortunadamente no puede, le permitiría crear tokens que son identificadores válidos (por ejemplo, podría nombrar una variable de la misma manera), lo que crearía algunas ambigüedades desagradables.
8000h // hex
FF00h // oops - valid identifier! Hex or a variable or type named FF00h?
No puedes liderar con un personaje por la misma razón:
xFF00 // also valid identifier
El uso de un hash probablemente se descartó porque entra en conflicto con el preprocesador:
#define ...
#FF00 // invalid preprocessor token?
Al final, por cualquier razón, decidieron poner una x después de un 0 inicial para denotar hexadecimal. No es ambiguo ya que todavía comienza con un carácter numérico, por lo que no puede ser un identificador válido, y probablemente se base en la convención octal de un 0 inicial.
0xFF00 // definitely not an identifier!
0xFFAB1234
debe escribirse como 0FFAB1234h
. Lo recuerdo de Asm en línea en Pascal cuando era joven stackoverflow.com/q/11733731/995714
Es un prefijo para indicar que el número está en hexadecimal en lugar de en alguna otra base. El lenguaje de programación C lo usa para decirle al compilador.
Ejemplo:
0x6400
se traduce en 6*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600.
Cuando el compilador lee 0x6400
, entiende que el número es hexadecimal con la ayuda del término 0x . Por lo general, podemos entender por (6400) 16 o (6400) 8 o lo que sea ...
Para binario sería:
0b00000001
Espero haber ayudado de alguna manera.
¡Buen día!
x6400
? El x
todavía podría usarse para inferir hexadecimal.
El 0 anterior se usa para indicar un número en la base 2, 8 o 16.
En mi opinión, se eligió 0x para indicar hexadecimal porque 'x' suena como hexadecimal.
Solo mi opinión, pero creo que tiene sentido.
¡Buen día!