Schlüsselwort ohne Vorzeichen in C ++


86

Verwendet das nicht signierte Schlüsselwort standardmäßig einen bestimmten Datentyp in C ++? Ich versuche, eine Funktion für eine Klasse für den Prototyp zu schreiben:

unsigned Rotate(unsigned object, int count)

Aber ich verstehe nicht wirklich was unsignedbedeutet. Sollte es nicht so sein unsigned intoder so?

Antworten:


91

Über den obigen Link :

Einige dieser Typen können mit den Schlüsselwörtern signiert, nicht signiert, kurz und lang geändert werden. Wenn einer dieser Typmodifikatoren alleine verwendet wird, wird ein Datentyp von int angenommen

Dies bedeutet, dass Sie davon ausgehen können, dass der Autor Ints verwendet.


Darf C99 und MISRA dies tun?
Nowox

41

Ganzzahlige Typen:

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

Sei vorsichtig mit char:

char  (is signed or unsigned depending on the implmentation)
signed char
unsigned char

1
@Firas: Ich weiß, dass es in C ist. Implizit ist int weder ein Teil von ISO C99 noch ein Teil von ISO C ++
Prasoon Saurav

4
Die Verwendung von 'unsigned' (für sich) zur Deklaration des Typs 'unsigned int' ist in C ++ Standard. Im aktuellen Standard: 7.1.5.2 [dcl.simple.type] enthält eine Tabelle, in der jede Typdeklaration für den tatsächlich verwendeten Typ angegeben ist. Diese Tabelle hat eine Entsprechung von der Deklaration 'unsigned' zum Typ 'unsigned int'.
David Rodríguez - Dribeas

2
Beachten Sie, dass char dasselbe Verhalten wie signiertes oder nicht signiertes Zeichen hat, aber unabhängig davon ein separater Typ bleibt.

@Firas: Siehe Abschnitt: 3.9.1 Grundtypen. Paragrah 2: <quote> Es gibt fünf vorzeichenbehaftete Standard-Ganzzahltypen: "signiertes Zeichen", "kurzes int", "int", "langes int" und "langes langes int". </ Quote>
Martin York

21

Verwendet das vorzeichenlose Schlüsselwort standardmäßig einen Datentyp in C ++?

Ja, signiert und nicht signiert können auch als eigenständige Typspezifizierer verwendet werden

Die ganzzahligen Datentypen char, short, long und int können abhängig vom zu darstellenden Zahlenbereich entweder vorzeichenbehaftet oder vorzeichenlos sein. Vorzeichenbehaftete Typen können sowohl positive als auch negative Werte darstellen, während vorzeichenlose Typen nur positive Werte (und Null) darstellen können.

Eine vorzeichenlose Ganzzahl, die n Bits enthält, kann einen Wert zwischen 0 und 2 n - 1 haben (das sind 2 n verschiedene Werte).

Vorzeichenbehaftete und vorzeichenlose Zeichen können jedoch auch als eigenständige Typspezifizierer verwendet werden. Dies bedeutet dasselbe wie vorzeichenbehaftetes int bzw. vorzeichenloses int. Die folgenden zwei Erklärungen sind gleichwertig:

unsigned NextYear;
unsigned int NextYear;

3
Ist das nicht ein "Ja"? Der Standardwert ist int, wenn er ohne Typ verwendet wird.
Entspannen Sie am

Danke dir! Englisch ist nicht meine Muttersprache und ich war verblüfft über die Bedeutung des nicht signierten Datentyps. Wessen Unterschrift enthält es? Mir ist nie in den
Sinn gekommen

Die Schlüsselwörter shortund longsind auch Typmodifikatoren . Wenn Sie schreiben short s, bedeutet das tatsächlich short int s, genau wie es unsigned utatsächlich bedeutet unsigned int u. (und unsigned shortbedeutet unsigned short int)
Ben Voigt

8

Informationen zum nicht signierten Schlüsselwort finden Sie in der C ++ - Referenz .

In dieser Angelegenheit gibt es zwei verschiedene Arten: signiert und nicht signiert. Der Standardwert für Ganzzahlen ist signiert, was bedeutet, dass sie negative Werte haben können.

Auf einem 32-Bit-System ist eine Ganzzahl 32 Bit, was bedeutet, dass sie einen Wert von ~ 4 Milliarden enthalten kann.

Und wenn es unterzeichnet ist, bedeutet dies, dass Sie es aufteilen müssen, sodass -2 Milliarden bis +2 Milliarden übrig bleiben.

Wenn es nicht vorzeichenlos ist, kann der Wert jedoch keine negativen Zahlen enthalten. Für ganze Zahlen würde dies 0 bis +4 Milliarden bedeuten.

Es gibt ein bisschen mehr Informationen dazu auf Wikipedia .


2
Ich mag es, für die meisten Dinge selbst zu singen. Leckerer Carbon und Carmelization!
Omnifarious

1
Wie wäre es mit Tippfehlern bearbeiten? ... dafür ist die Schaltfläche "Bearbeiten" da!
Filip Ekberg

3

Ja, das heißt unsigned int. Früher gab es viele Stellen, an denen nur angenommen wurde, dass Sie in C keinen Datentyp angegeben haben int. Dies war beispielsweise ein Versuch von Funktionsrückgabetypen.

Diese Warze wurde größtenteils ausgerottet, aber Sie stoßen hier auf ihre letzten Spuren. IMHO sollte der Code so festgelegt werden, dass unsigned intnur die Art von Verwirrung vermieden wird, die Sie erleben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.