107 votes

Qu'est-ce que le type de données non signé ?

J'ai vu ceci unsigned Le terme "typeless" a été utilisé plusieurs fois, mais je n'ai jamais vu d'explication à ce sujet. Je suppose qu'il existe un signed type. 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 recueilli jusqu'à présent :
- sur mon système, sizeof(unsigned) = 4 (allusion à un int non signé de 32 bits)
- il peut être utilisé comme raccourci pour convertir un autre type en version non signée :

signed long int i = -42;
printf("%u\n", (unsigned)i);

S'agit-il d'un C ANSI ou d'une simple extension du compilateur ?

3voto

Lundin Points 21616

Selon la norme C17 6.7.2 §2 :

Chaque liste de spécificateurs de type est l'un des multi-ensembles suivants (délimités par des virgules lorsqu'il y a plus d'un multi-ensemble par élément) ; les spécificateurs de type peuvent apparaître dans n'importe quel ordre, éventuellement mélangés à d'autres spécificateurs de déclaration

- vide
- char
- Char signé
- char non signé
- court, court signé, court int, ou court int signé
- short non signé, ou unsigned short int
- int, signed, ou signed int
- non signé, ou int non signé
- long, long signé, long int, ou long int signé
- unsigned long, ou unsigned long int
- long long, long long signé, long int, ou long long int signé
- long non signé, ou long non signé long int
- flotteur
- double
- long double
- _Bool
- float _Complex
- double _Complex
- long double _Complex
- spécificateur de type atomique
- spécificateur de structure ou d'union
- spécificateur d'énumération
- typedef nom

Ainsi, en cas de unsigned int nous pouvons soit écrire unsigned o unsigned int ou si nous nous sentons fous, int unsigned . Ce dernier puisque la norme est assez stupide pour autoriser "...peuvent se produire dans n'importe quel ordre, éventuellement mélangés". Il s'agit d'un défaut connu du langage.

Un code C correct utilise unsigned int .

1voto

Bruno Ferreira Points 1352

Apporter mon réponse à une autre question .

A partir de la Cahier des charges , section 6.7.2 :

- non signé, ou int non signé

Ce qui signifie que unsigned Lorsque le type n'est pas spécifié, la valeur par défaut est unsigned int . Ainsi, l'écriture unsigned a est identique à unsigned int a .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X