2011-01-19 28 views

Respuesta

20

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 
+0

No tengo la experiencia para declarar esto correcto, pero tiene más sentido que la otra respuesta. – delnan

+0

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

+1

@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. –

12

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 
+2

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'). –

+0

@JensGustedt: ¿Presumiblemente quiere decir que si el ancho de 'int' es ** 16 ** bit, entonces' 0x8000' será 'unsigned'? –

+1

@Charles, probablemente. Contar bits nunca fue mi fuerza :) –

Cuestiones relacionadas