¿Trata C las constantes hexadecimales (por ejemplo, 0x23FE) y las int firmadas o no?Constante hexadecimal sin signo en C?
Amr
¿Trata C las constantes hexadecimales (por ejemplo, 0x23FE) y las int firmadas o no?Constante hexadecimal sin signo en C?
Amr
El número en sí siempre se interpreta como un número no negativo. Las constantes hexadecimales no tienen un signo ni ninguna forma inherente de expresar un número negativo. El tipo de la constante es el primero de ellos que puede representar su valor:
int
unsigned int
long int
unsigned long int
long long int
unsigned long long int
Se les trata como int
literales (básicamente, como int firmado!). Para escribir un literal sin signo sólo tiene que añadir al final u
:
0x23FEu
No creo que pueda dejar esa afirmación como tal. E.g siempre que el ancho de 'int' sea 32 bit, el valor' 0x8000' es 'unsigned' (es decir' INT_MAX + 1') y no 'signed' (y' INT_MIN'). –
@JensGustedt: ¿Presumiblemente quiere decir que si el ancho de 'int' es ** 16 ** bit, entonces' 0x8000' será 'unsigned'? –
@Charles, probablemente. Contar bits nunca fue mi fuerza :) –
No tengo la experiencia para declarar esto correcto, pero tiene más sentido que la otra respuesta. – delnan
Tenga en cuenta que, como consecuencia, 0x8000 puede estar firmado o no, según si sizeof (int) es 2 o 4. ¡Yuck! Solo agrega 'u' si realmente necesitas' unsigned'. – anatolyg
@anatolyg: No estoy seguro de lo que quiere decir con "asco". Siempre será positivo y siempre se convertirá al valor correcto si se asigna o se promueve a otro tipo en el que el valor esté todavía dentro del rango que me parezca un comportamiento bastante razonable y deseable. –