web-dev-qa-db-fra.com

Mot clé non signé en C ++

Le mot clé unsigned est-il défini par défaut sur un type de données spécifique en C++? J'essaie d'écrire une fonction pour une classe pour le prototype:

unsigned Rotate(unsigned object, int count)

Mais je ne comprends pas vraiment ce que unsigned signifie. Ça ne devrait pas être comme unsigned int ou quelque chose?

81
Crystal

À partir du lien ci-dessus:

Plusieurs de ces types peuvent être modifiés à l'aide des mots-clés signés, non signés, courts et longs. Lorsqu'un de ces modificateurs de type est utilisé seul, un type de données de int est supposé

Cela signifie que vous pouvez supposer que l'auteur utilise ints.

90
futureelite7

Types d'entiers:

short            -> signed short
signed short
unsigned short
int              -> signed int
signed int
unsigned int
signed           -> signed int
unsigned         -> unsigned int
long             -> signed long
signed long
unsigned long

Attention aux chars:

char  (is signed or unsigned depending on the implmentation)
signed char
unsigned char
38
Martin York

Le mot clé unsigned est-il défini par défaut sur un type de données en C++?

Oui, signé et non signé peut également être utilisé comme spécificateur de type autonome

Les types de données entiers char, short, long et int peuvent être signés ou non signés en fonction de la plage de nombres à représenter. Les types signés peuvent représenter des valeurs positives et négatives, alors que les types non signés ne peuvent représenter que des valeurs positives (et zéro).

Un entier non signé contenant n bits peut avoir une valeur comprise entre 0 et 2n - 1 (qui est 2n valeurs différentes).

Cependant, signé et non signé peut également être utilisé en tant que spécificateur de type autonome, ce qui signifie la même chose que "signé int" et "non signé int". Les deux déclarations suivantes sont équivalentes:

unsigned NextYear;
unsigned int NextYear;
21
Prasoon Saurav

Vous pouvez en savoir plus sur le mot clé non signé dans la référence C++ .

Il existe deux types différents en la matière, signé et non signé. La valeur par défaut pour les entiers est signée, ce qui signifie qu'ils peuvent avoir des valeurs négatives.

Sur un système 32 bits, un entier est 32 bits, ce qui signifie qu'il peut contenir environ 4 milliards de dollars.

Et quand il est signé, cela signifie que vous devez le scinder, laissant -2 milliards à +2 milliards.

Quand il est non signé, la valeur ne peut pas contenir des nombres négatifs. Par conséquent, pour les entiers, cela signifie 0 à +4 milliards.

Il y a un peu plus d'informations à ce sujet sur Wikipedia .

8
Filip Ekberg

Oui, cela signifie unsigned int. Auparavant, si vous ne spécifiiez pas de type de données en C, il était souvent supposé que int était utilisé. Cela a été essayé, par exemple, des types de retour de fonction.

La plupart des verrues ont été éradiquées, mais vous rencontrez ici leurs derniers vestiges. IMHO, le code devrait être corrigé pour dire unsigned int pour éviter le genre de confusion que vous rencontrez.

3
Omnifarious