Constante hexadecimal sin signo en C?

¿C trata las constantes hexadecimales (p. Ej., 0x23FE) y las int firmadas o no firmadas?

El número en sí mismo siempre se interpreta como un número no negativo. Las constantes hexadecimales no tienen un signo ni ninguna forma inherente de express un número negativo. El tipo de 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 

Los trata como int literales (básicamente, como firmó int!). Para escribir un literal sin firmar, simplemente añádele al final:

 0x23FEu 

De acuerdo con cppreference , el tipo del literal hexadecimal es el primer tipo en la siguiente lista en la que el valor puede caber.

 int unsigned int long int unsigned long int long long int (since C++11) unsigned long long int (since C++11) 

Entonces depende de qué tan grande sea tu número. Si su número es menor que INT_MAX , entonces es de tipo int . Si su número es mayor que INT_MAX pero menor que UINT_MAX , es de tipo unsigned int , y así sucesivamente.

Como 0x23FE es más pequeño que INT_MAX (que es 0x7FFF o mayor), es de tipo int .

Si desea que no esté firmado, agregue una u al final del número: 0x23FEu .