2017-02-14 2 views
1

Kann ein int standardmäßig wie char unsigniert werden und kann jemand diese Plattform bereitstellen, wenn es existiert?Kann int in einigen Plattformen standardmäßig int int sein?

Ich meine, dass char je nach Plattformen unsigned oder signiert werden kann. Gilt das Gleiche für int, long, short?

+6

Seit wann ist 'char'' vorzeichenlos? –

+1

Woher hast du diese Idee? Oo – Cakeisalie5

+8

Weder 'int' noch' char' sind standardmäßig 'unsigned'. 'int' wird immer signiert, wenn nicht anders angegeben. 'char's signedness ist Implementierung definiert. –

Antwort

6

Gemäß der C11 standard section "5.2.4.2.1 Sizes of integer types ":

Die unten angegebenen Werte werden durch konstante Ausdrücke ersetzt werden geeignet für den Einsatz in #if Vorverarbeitung Richtlinien. Darüber hinaus werden mit Ausnahme von CHAR_BIT und MB_LEN_MAX folgende Ausdrücke durch Ausdrücke ersetzt, die denselben Typ haben wie ein Ausdruck, der ein Objekt des entsprechenden Typs ist, der gemäß der Ganzzahl Promotions konvertiert wurde. Ihre Umsetzung definierten Werte müssen gleich oder betragsmäßig größer (Absolutwert) seine zu dem gezeigten, mit denselben Zeichen.
...........................
Minimalwert für ein Objekt vom Typ int
INT_MIN -32767
Maximalwert für ein Objekt vom Typ int
INT_MAX +32767

So, wie Sie die Grenzen der int zumindest werden müssen sehen können diejenigen angegeben (absolute Werte) mit den gleichen Vorzeichen.

+0

Sie übersprungen sehr wichtigen Teil 'Ihre Implementierung definierten Werte' – Sabrina

+2

@Sabrina Nein, habe ich nicht. Es besagt, dass ihre implementierten definierten Werte durch den hervorgehobenen Text begrenzt sind. Also müssen sie unabhängig von der Implementierung eine Reichweite haben [-32767, 32767]. Ihre Implementierung kann daher nur diesen Bereich vergrößern. –

+0

Ich habe INT_MIN an den meisten Orten als -32768 definiert. Ist dein eigentlich -32767? – ryyker

10

Nein, int ist immer signiert. Im Gegensatz zu char, die sich je nach Plattform wie ein signed char oder unsigned char verhalten kann, ist int immer ein Synonym für signed int, unabhängig von der Plattform, in C und C++.

Referenz: C99, 6.2.5.4:

Es gibt fünf Standard-Signed Integer-Typen, die als signed char, short int, int, long int und long long int.

Referenz: C++ 11, 3.9.1.2:

Es gibt fünf Standard-Signed Integer-Typen: signed char, short int, int, long int und long long int.

+0

Warum gibt es kein 'short'? – Sabrina

+0

"' int' ist immer signiert. " verdient einen Hinweis zu _bit-fields_: "Wenn der tatsächliche Typbezeichner 'int' ist oder ein typedef-name als 'int' definiert ist, dann ist es implementierungsdefiniert, ob das Bitfeld signiert oder unsigniert ist." – chux

+2

@chux Vielen Dank für den Kommentar! Sie haben absolut Recht, Bitfelder unterliegen einem separaten Regelwerk. Ich war mir nicht sicher, ob ich diese Dose Würmer im Zusammenhang mit dieser Frage öffnen wollte, weil es so klingt, als ob OP eine sehr spezifische Sache herausfinden möchte, die nichts mit Bitfeldern zu tun hat. – dasblinkenlight

7

char ist eigentümlich: Es gibt drei Aromen, signed char, unsigned char und char. Eine einfache char kann abhängig von der Implementierung signiert oder unsigniert sein, aber in C++ ist es ein anderer Typ als die anderen beiden. Alle anderen Integertypen haben nur zwei Varianten, signiert und unsigniert; Sie können sagen unsigned int, signed int, und einfach nur int, aber einfach int ist signiert, und es ist nur ein anderer Name für signed int. Im C++ - Standard heißt das Abschnitt 3.9.1, [basic.fundamental].

Verwandte Themen