Welche Wertebereich können Typen Speicher in C ++ integer
Frage
Kann eine zehn-stellige Nummer (1000000000 - 9999999999) unsigned long int
halten? Auf einem 32-Bit-Computer
Darüber hinaus, was sind die Bereiche von unsigned long int
, long int
, unsigned int
, short int
, short unsigned int
und int
?
Lösung
Die Minimum Bereiche, die Sie sich verlassen können, sind:
-
short int
undint
: -32.767 bis 32.767 -
unsigned short int
undunsigned int
: 0 bis 65.535 -
long int
: -2147483647 bis 2147483647 -
unsigned long int
: 0 bis 4294967295
Das bedeutet, dass keine, long int
nicht auf jede 10-stellige Nummer speichern verlassen. Es wurde jedoch ein größerer Typ long long int
bis C in C99 und C ++ eingeführt in C ++ 11 (diese Art wird auch oft als Erweiterung unterstützt von Compilern für ältere Standards, die es nicht sind). Der Minimalbereich für diese Art, wenn Ihr Compiler unterstützt, ist:
-
long long int
: -9.223.372.036.854.775.807 zu 9.223.372.036.854.775.807 -
unsigned long long int
: 0 bis 18.446.744.073.709.551.615
Damit Typ groß genug sein wird (auch hier , wenn Sie haben es verfügbar ist).
Ein Hinweis für diejenigen, die glauben, dass ich einen Fehler mit dieser unteren Grenze gemacht habe - habe ich nicht. Die C-Anforderungen für die Bereiche geschrieben werden für einerkomplement erlauben oder zu unterschreiben-Helligkeits-ganzzahlige Darstellungen, in denen der niedrigste darstellbaren Wert und die höchste darstellbaren Wert unterscheiden sich nur im Vorzeichen. Es ist auch 0 ist eine Trap-Darstellung und nicht als Rechtswert eines Zweier-Komplement-Darstellung, wobei der Wert mit Vorzeichen-Bit 1 und alle Bits Wert haben darf. Mit anderen Worten, int
ist nicht muß in der Lage sein, den Wert darzustellen -32.768.
Andere Tipps
Die Größe der numerischen Typen nicht in dem C ++ Standard definiert, obwohl die Mindestgrößen sind. Die Art und Weise zu erklären, welche Größe sie auf Ihrer Plattform sind verwenden numerische Grenzen
Zum Beispiel kann der Maximalwert für einen int durch gefunden werden:
std::numeric_limits<int>::max();
Computer funktionieren nicht in der Basis 10, was bedeutet, dass der Maximalwert in Form sein wird, von 2 n -1, weil, wie die Zahl der im Speicher darstellen. Nehmen Sie zum Beispiel acht Bits (1 Byte)
0100 1000
Die am weitesten rechts stehende Bit (Zahl), wenn auf 1 gesetzt für 2 0 , das nächste Bit 2 1 , dann 2 2 und so auf, bis wir auf die am weitesten links stehenden Bit erhalten, die, wenn die Zahl ohne Vorzeichen für 2 7 .
So ist die Zahl steht für 2 6 + 2 3 = 64 + 8 = 72, weil das vierte Bit von rechts und dem 7. Bit rechts links eingestellt ist.
Wenn wir setzen alle Werte auf 1:
11111111
Die Zahl wird nun (unter der Annahme unsigned )
64 + 128 + 32 + 16 + 8 + 4 + 2 + 1 = 255 = 2 8 - 1 |
Und wie wir sehen können, dass ist der größte mögliche Wert, der mit 8 Bits dargestellt werden kann.
Auf meinem Rechner und int und ein lange gleich sind, jeweils in der Lage zwischen -2 31 2 31 zu halten - 1. In meiner Erfahrung der häufigste Größe auf modernen 32-Bit-Desktop-Rechner.
Um die Grenzen auf Sie herausfinden, System:
#include <iostream>
#include <limits>
int main(int, char **) {
std::cout
<< static_cast< int >(std::numeric_limits< char >::max()) << "\n"
<< static_cast< int >(std::numeric_limits< unsigned char >::max()) << "\n"
<< std::numeric_limits< short >::max() << "\n"
<< std::numeric_limits< unsigned short >::max() << "\n"
<< std::numeric_limits< int >::max() << "\n"
<< std::numeric_limits< unsigned int >::max() << "\n"
<< std::numeric_limits< long >::max() << "\n"
<< std::numeric_limits< unsigned long >::max() << "\n"
<< std::numeric_limits< long long >::max() << "\n"
<< std::numeric_limits< unsigned long long >::max() << "\n";
}
Beachten Sie, dass long long
nur legal in C99 ist und in C ++ 11.
Andere Leute hier werden nach Links zu data_sizes und Präzisierungen usw.
Ich werde Ihnen sagen, wie es herauszufinden selbst.
Schreiben Sie eine kleine Anwendung, die die folgenden tun wird.
unsigned int ui;
std::cout << sizeof(ui));
Dies wird (je nach Compiler und archicture) print 2, 4 oder 8, sagen 2 Bytes lang, 4 Bytes lang etc.
Nehmen wir an, es ist 4.
Sie wollen nun der Maximalwert 4 Bytes speichern kann, der maximale Wert für ein Byte (in hex) 0xFF. Der Maximalwert von vier Bytes 0x gefolgt von 8 Fs (ein Paar von Fs für jedes Byte, teilt die 0x die Compiler, die folgende Zeichenfolge ist eine Hexadezimalzahl). Jetzt ist Ihr Programm ändert diesen Wert zuweisen und das Ergebnis drucken
unsigned int ui = 0xFFFFFFFF;
std::cout << ui;
Das ist der Maximalwert ein unsigned int halten kann, in der Basis 10 gezeigt, abweichen.
Jetzt tun, dass für Longs, Shorts und jede andere INTEGER Wert Sie neugierig sind.
Hinweis: Dieser Ansatz wird für Gleitkommazahlen nicht arbeiten (das heißt doppelt oder float)
.Hope, das hilft
In C ++ int jetzt und anderen Daten unter Verwendung von 2-Komplement-Methode gespeichert. Das heißt, der Bereich ist:
-2147483648 to 2147483647
oder -2 ^ 31 bis 2 ^ 31-1
1 Bit für 0 so positiven Wert reserviert ist um eins kleiner als 2 ^ (31)
unsigned Datentyp ist kein Vorzeichenbit und alle Bits für Daten ; während für signierten Datentyp MSB angegeben Vorzeichenbit und restlichen Bits sind für Daten.
Um den Bereich Sie folgende Dinge zu finden:
Schritt:. 1 -> kein Bytes für den Give-Datentyp finden Sie mit
Schritt:. 2 -> Anwenden folgende Berechnungen
Let n = no of bits in data type
For signed data type ::
Lower Range = -(2^(n-1))
Upper Range = (2^(n-1)) - 1)
For unsigned data type ::
Lower Range = 0
Upper Range = (2^(n)) - 1
Für z.
unsigned int size = 4 Bytes (32 Bits) -> Bereich [0, (2 ^ (32)) - 1]
signed int size = 4 Bytes (32 Bits) -> Bereich [- (2 ^ (32-1)), (2 ^ (32-1)) - 1]
Nein, nur ein Teil der zehn Ziffern Zahl kann in einem unsigned long int, dessen Gültigkeitsbereich beträgt 0 bis 4.294.967.295 gespeichert werden. Sie können auf diese verweisen: http://msdn.microsoft.com/en-us /library/s3f49ktz(VS.80).aspx
Kann unsigned long int halten eine zehn-stellige Nummer (1000000000 - 9999999999). Auf einem 32-Bit-Computer
Nein
Sie an den Spezialisierungen der numeric_limits aussehen sollte <> Vorlage für einen bestimmten Typ. Sein in der Kopfzeile.