¿Constante hexadecimal sin signo en C?
¿C trata constantes hexadecimales (por ejemplo, 0x23FE) y con o sin signo int?
3 answers
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 la primera de ellas que puede representar su valor:
int
unsigned int
long int
unsigned long int
long long int
unsigned long long int
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-19 16:27:10
Los trata como int
literales (básicamente, como firmado int!). Para escribir un literal sin signo basta con añadir u
al final:
0x23FEu
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-19 16:26:08
De acuerdo con cppreference, el tipo del literal hexadecimal es el primer tipo de la siguiente lista en el que puede caber el valor.
int
unsigned int
long int
unsigned long int
long long int(since C99)
unsigned long long int(since C99)
Así que depende de qué tan grande sea tu número. Si su número es menor que INT_MAX
, entonces es del tipo int
. Si su número es mayor que INT_MAX
pero menor que UINT_MAX
, es de tipo unsigned int
, y así sucesivamente.
Dado que 0x23FE
es menor que INT_MAX
(que es 0x7FFF
o mayor), es del tipo int
.
Si quieres ser sin signo, añadir un u
al final del número: 0x23FEu
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-13 00:46:16