J'ai vu ce unsigned
type "sans type" utilisé plusieurs fois, mais je n'ai jamais vu d'explication. Je suppose qu'il existe un signed
type correspondant . Voici un exemple:
static unsigned long next = 1;
/* RAND_MAX assumed to be 32767 */
int myrand(void) {
next = next * 1103515245 + 12345;
return((unsigned)(next/65536) % 32768);
}
void mysrand(unsigned seed) {
next = seed;
}
Ce que j'ai rassemblé jusqu'à présent:
- sur mon système, sizeof(unsigned) = 4
(fait allusion à un int non signé 32 bits)
- il pourrait être utilisé comme un raccourci pour convertir un autre type en version non signée:
signed long int i = -42;
printf("%u\n", (unsigned)i);
Est-ce ANSI C, ou juste une extension de compilateur?
long
au lieu delong int
est très courant, donc je ne sais pas pourquoiunsigned
au lieu deunsigned int
ne serait pas acceptable.en C,
unsigned
est un raccourci pourunsigned int
.Vous avez la même chose pour
long
cela est un raccourci pourlong int
Et il est également possible de déclarer a
unsigned long
(ce sera aunsigned long int
).C'est dans la norme ANSI
la source
unsigned
est le même queunsigned int
mais j'ai fait une recherche sur le projet de comité WG14 / N1124 - 6 mai 2005 ISO / CEI 9899: TC2 pourunsigned
et je n'ai pas pu trouver où est défini ... pouvez-vous citer la partie où il est défini?En C et C ++
unsigned = unsigned int (Integer type) signed = signed int (Integer type)
Un entier non signé contenant n bits peut avoir une valeur comprise entre 0 et (2 ^ n-1), soit 2 ^ n valeurs différentes.
Un entier non signé est positif ou nul.
Les entiers signés sont stockés dans un ordinateur en utilisant le complément de 2.
la source
Selon C17 6.7.2 §2:
Ainsi , en cas de
unsigned int
nous pouvons soit écrireunsigned
ouunsigned int
, ou si on se sent fou,int unsigned
. Ce dernier puisque la norme est assez stupide pour permettre "... peut se produire dans n'importe quel ordre, éventuellement mélangé". Il s'agit d'un défaut connu de la langue.Le bon code C utilise
unsigned int
.la source
Apportant ma réponse à une autre question .
À partir de la spécification C , section 6.7.2:
Cela signifie que
unsigned
, lorsqu'il n'est pas spécifié, le type doit être par défautunsigned int
. Donc, l'écritureunsigned a
est la même chose queunsigned int a
.la source