Mot clé non signé en C ++

87

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

unsigned Rotate(unsigned object, int count)

Mais je ne comprends pas vraiment ce que cela unsignedsignifie. Ne devrait-il pas être comme unsigned intou quelque chose?

Cristal
la source

Réponses:

92

À partir du lien ci - dessus:

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

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

futureelite7
la source
Est-ce que C99 et MISRA sont autorisés à le faire?
nowox
42

Types 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 au char:

char  (is signed or unsigned depending on the implmentation)
signed char
unsigned char
Martin York
la source
1
@Firas: Je sais que c'est en C .Implicit int ne fait ni partie d'ISO C99 ni d'une partie d'ISO C ++
Prasoon Saurav
4
L'utilisation de 'unsigned' (seul) pour déclarer le type 'unsigned int' est standard dans C ++. Dans la norme actuelle: 7.1.5.2 [dcl.simple.type] a une table qui identifie chaque déclaration de type par rapport au type réel utilisé. Cette table a une correspondance de la déclaration «unsigned» au type «unsigned int».
David Rodríguez - dribeas
2
Notez que char a un comportement identique à char signé ou non signé, mais reste un type distinct quoi qu'il arrive.
@Firas: voir la section: 3.9.1 Types fondamentaux. Paragrah 2: <quote> Il existe cinq types d'entiers signés standard: "signed char", "short int", "int", "long int" et "long long int". </quote>
Martin York
21

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

Oui, signé et non signé peuvent également être utilisés comme spécificateurs de type autonomes

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, tandis 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 2 n - 1 (soit 2 n valeurs différentes).

Cependant, signé et non signé peuvent également être utilisés comme spécificateurs de type autonomes, ce qui signifie respectivement les entiers signés et int non signés. Les deux déclarations suivantes sont équivalentes:

unsigned NextYear;
unsigned int NextYear;
Prasoon Saurav
la source
3
N'est-ce pas un "oui", alors? Il vaut par défaut int, s'il est utilisé sans type?
détendre le
Merci! L'anglais n'est pas ma langue maternelle et j'ai été déconcerté par la signification du type de données non signé. De quelle signature contient-il? Il ne m'est jamais venu à l'
esprit
Les mots short- clés et longsont également des modificateurs de type . Si vous écrivez short s, cela signifie en fait short int s, tout comme unsigned usignifie réellement unsigned int u. (et unsigned shortsignifie unsigned short int)
Ben Voigt
8

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

Il existe deux types différents dans ce domaine, signé et non signé. La valeur par défaut des entiers est signée, ce qui signifie qu'ils peuvent avoir des valeurs négatives.

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

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

Lorsqu'elle n'est pas signée, la valeur ne peut pas contenir de nombres négatifs, donc pour les entiers, cela signifierait 0 à +4 milliards.

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

Filip Ekberg
la source
2
J'aime chanté pour la plupart des choses moi-même. Délicieux carbone et carmelization!
Omniprésente le
1
Que diriez-vous de modifier les fautes de frappe? ... c'est à cela que sert le bouton "modifier"!
Filip Ekberg
3

Oui, ça veut dire unsigned int. Auparavant, si vous ne spécifiiez pas de type de données dans C, il y avait de nombreux endroits où il était simplement supposé int. C'était essayer, par exemple, des types de retour de fonction.

Cette verrue a été en grande partie éradiquée, mais vous rencontrez ses derniers vestiges ici. À mon humble avis, le code doit être corrigé pour unsigned intéviter le genre de confusion que vous rencontrez.

Très varié
la source