Formel zum Bestimmen des Bereichs von signierten und unsignierten Datentypen C ++

8

Ich beginne gerade in C ++ (buchstäblich mein zweiter Tag) und mir wurde zugewiesen, um die Bereiche der verschiedenen Datentypen, signiert und unsigniert, zu berechnen. Das Problem ist, die Art, wie meine Schule arbeitet, ich werde nicht zum Math-Teil kommen, wo er uns die Formel für ein paar weitere Monate beibringt. Er sagte, um die Informationen von jemandem zu bekommen, der den Mathe-Kurs schon gemacht hat, aber alle sagten, dass sie von zuhause aus arbeiten werden, wo sie ihre Notizen haben. So, jetzt bin ich im Dunkeln mit Google und seinen unschlüssigen Antworten, so frage ich Sie, die weisen Leute von stackoverflow.

Was sind die Formeln, um den Bereich der Datentypen zu erhalten? Ich habe einen für INT gefunden, der funktioniert hat, aber nicht für die anderen gilt. Die, die er berechnen soll, sind: char, short, long und long long. Er will auch die unsignierten Versionen dieser 4 sowie INT.

Wir haben bereits die Größe in Bits und Bytes für jeden dieser Datentypen.

So habe ich meinen INT-Bereich angelegt:

%Vor%     
Andrew B 07.08.2013, 19:36
quelle

2 Antworten

20

std::numeric_limits<T>

Mit diesen Funktionen können Sie die tatsächlichen Werte dieser Grenzwerte abrufen:

Sie ersetzen den entsprechenden Typ anstelle von T , z. B. signed char oder unsigned char .

Formeln

Die Formeln für eine vorzeichenbehaftete Zahl mit N Bits (mit Zweierkomplement ) sind

  • min = -1 * 2 N - 1
  • max = 2 N - 1 - 1

Die Formeln für eine vorzeichenlose Zahl mit N Bits sind

  • min = 0
  • max = 2 N - 1

Beispiel: 8-bit char

Das char hat N = 8 Bits. Lassen Sie uns diese Formeln mit signed char und unsigned char überprüfen.

  • %Code%
    • min = -1 * 2 N - 1 = -1 * 2 7 = -128
    • max = 2 N - 1 - 1 = 2 7 - 1 = 127
  • %Code%
    • min = 0
    • max = 2 N - 1 = 2 8 - 1 = 255
Timothy Shields 07.08.2013, 19:43
quelle
1

Tatsächlich können diese Bereiche in <limits> gefunden werden - siehe Referenz und speziell die Vorlage std::numeric_limits - siehe hier . Ich gehe jedoch davon aus, dass Sie wissen wollen, woher diese Zahlen kommen.

Wichtig ist die Anzahl der Bits. Wenn Sie n Bits haben, können Sie 2 verschiedene Werte mit ihnen angeben. Nimm eine Old-School-16-Bit-Ganzzahl. Bei 16 Bits beträgt die Anzahl der möglichen anderen Werte 2 16 = 65536. Wenn Sie einen Wert ohne Vorzeichen haben, werden nur nicht negative Werte ausgedrückt. Der kleinste Wert, den Sie ausdrücken, ist also 0, und der größte Wert ist 2 n - 1, also geht eine 16-Bit-Ganzzahl ohne Vorzeichen von 0 nach 65535 .

Wenn Sie ganze Zahlen mit einem Vorzeichen ausdrücken, haben Sie natürlich die gleiche Anzahl an Werten (65536 im vorherigen Beispiel), um einige positive und negative Zahlen auszudrücken. Sie haben 0 in der Mitte, und dann teilen Sie die verbleibenden Werte zwischen negativen und positiven Werten. So erhalten Sie -32768 am unteren Ende und 32767 am oberen Ende.

Für jeden anderen Datentyp, der eine ganze Zahl repräsentiert, ist es das gleiche Muster, egal ob es 32, 64 oder mehr Bits ist.

    
DUman 07.08.2013 19:50
quelle

Tags und Links