¿Por qué los números hexadecimales tienen el prefijo 0x? Entiendo el uso del prefijo pero no entiendo la importancia de por qué 0xfue elegido.
¿Por qué los números hexadecimales tienen el prefijo 0x? Entiendo el uso del prefijo pero no entiendo la importancia de por qué 0xfue elegido.
Respuestas:
En pocas palabras: El 0le 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: xes 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 1234para los números octales. Cuando Ken Thompson creó B de BCPL, usó el 0prefijo en su lugar. Esto es genial porque
0es 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, 0xse eligió arbitrariamente ( 00probablemente se descartó como incómodo).
C # es un descendiente de C, por lo que hereda la sintaxis.
0xen la 00preferencia / incomodidad. 00rompería el código existente. 0010como octal es 8, mientras que 0010como hexadecimal sería 16. No podían usar ningún número como indicador de segundo dígito (excepto 8o 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 0ho 0x( H e X idecimal). Desde este punto parece que realmente ha vuelto a la preferencia.
0prefijo 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 8o 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!
0xFFAB1234debe 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:
0x6400se 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 xtodaví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!