Constante hexadécimale non signée en C?

traite-t-on les constantes hexadécimales (p. ex. 0x23FE) et les int signées ou non?

25
demandé sur Amr Bekhit 2011-01-19 19:22:17

3 réponses

Le nombre lui-même est toujours interprétée comme un nombre non négatif. Les constantes hexadécimales n'ont pas de signe ou de façon inhérente pour exprimer un nombre négatif. Le type de la constante est le premier de ceux-ci qui peuvent représenter leur valeur:

int
unsigned int
long int
unsigned long int
long long int
unsigned long long int
24
répondu CB Bailey 2011-01-19 16:27:10

Il les traite comme des int littérales (essentiellement, comme signé int!). Pour écrire une lettre non signée il suffit d'ajouter u à la fin:

0x23FEu
11
répondu AraK 2011-01-19 16:26:08

Selon cppreference, le type de l'hexadécimal littérale est le premier type dans la liste suivante dans laquelle la valeur peut s'adapter.

int
unsigned int
long int
unsigned long int
long long int(since C99)
unsigned long long int(since C99) 

Donc, cela dépend de la taille de votre numéro. Si votre nombre est plus petit que INT_MAX, alors c'est de type int. Si votre nombre est plus grand que INT_MAX mais plus petit que UINT_MAX, il est de type unsigned int, et ainsi de suite.

Depuis 0x23FE est plus petit que INT_MAX(0x7FFF ou plus), il est de type int.

Si vous voulez qu'il soit non signé, ajouter un u à la fin du numéro: 0x23FEu.

1
répondu Searene 2018-09-13 00:46:16