sirve - ¿Por qué los números hexadecimales son prefijados con 0x?
sistema hexadecimal ejemplos (4)
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 hex porque "x" suena como hex.
Solo mi opinión, pero creo que tiene sentido.
¡Buen día!
¿Por qué los números hexadecimales tienen el prefijo 0x
? Entiendo el uso del prefijo pero no entiendo la importancia de por qué se eligió 0x
.
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
traduce a 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 haberte ayudado de alguna manera.
¡Buen día!
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 que necesita crear un sistema para denotar números hexadecimales y tenga en cuenta que estamos trabajando en un entorno de estilo C ¿Qué hay de terminar con h como asamblea? Desafortunadamente, no puede: le permitiría hacer tokens que son identificadores válidos (por ejemplo, podría nombrar una variable como la misma cosa) lo que generarí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 desechó 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 aún comienza con un carácter numérico, por lo que no puede ser un identificador válido, y probablemente se basa en la convención octal de un 0 inicial.
0xFF00 // definitely not an identifier!
Historia corta: El 0
le dice al analizador que se trata de una constante (y no de un identificador / palabra reservada). Todavía se necesita algo para especificar la base numérica: la x
es una opción arbitraria.
Historia larga: en la década de los 60, los sistemas numéricos de programación predominantes eran decimales y octales : los mainframes tenían 12, 24 o 36 bits por byte, lo cual es divisible por 3 = log2 (8).
El lenguaje BCPL usó la sintaxis 8 1234
para los números octales. Cuando Ken Thompson creó B a partir de BCPL, usó el prefijo 0
lugar. Esto es genial porque
- una constante entera ahora siempre consiste en un solo token,
- el analizador todavía puede decir de inmediato que tiene una constante,
- el analizador puede indicar inmediatamente la base (
0
es el mismo en ambas bases), - es matemáticamente sano (
00005 == 05
), y - no se necesitan caracteres especiales preciosos (como en
#123
).
Cuando se creó C 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 seguían siendo válidos. Debido a que los octales aún se necesitaban para otras máquinas, se seleccionó arbitrariamente 0x
(probablemente se descartó 00
por ser incómodo).
C # es un descendiente de C, por lo que hereda la sintaxis.