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?

War es hilfreich?

Lösung

Die Minimum Bereiche, die Sie sich verlassen können, sind:

  • short int und int: -32.767 bis 32.767
  • unsigned short int und unsigned 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top