speckles
Goto Top

Mathe - Fortlaufende Zählung anhand von Integer Werten

Hallo Community,

ich bin derzeit am Mathe Nachsitzen und habe derzeit ein kleines großes Brett vor dem Kopf face-wink

Und zwar versuche ich derzeit zu erlernen, wie der Computer Werte speichert. Dazu habe ich mir folgendes nun Gedanklich zusammengebaut:

1.) Ein Programm (in diesem Fall Visual Studio) reserviert über den Befehl int zahl = 2147483647 - 32 Bit im Speicher (da "int" bekanntlich 32bit erlaubt)
2.) Den reservierten 32Bits im Speicher wird die Zahl durch Konvertierung in Binär gespeichert. In diesem Fall 32x 1Bit


Ich habe nachgelesen, das "int" den Wertebereich −2.147.483.648 bis +2.147.483.647 hat.

Warum ist das Bit-Muster (32x 1 Bit für 2147483647) alles komplett 1? Ich hatte eigentlich gelernt, das wenn das erste Bit 1 ist, ist die Zahl negativ, ansonsten positv.
In diesem Fall ist die Zahl (2147483647) doch positiv, dann darf doch gar nicht die 1 vorne stehen, oder?

Meine Vermutung war dann, das dieses Phänomen etwas mit signed und unsigned zutun haben könnte, was bedeuten würde, das "int" im besonderen Fall statt negativ Zahlen den Wert 4.294.967.295 darstellen könnte.

Kann mir jemand helfen, wo ich meine Denkfehler habe?

Vielen Dank.
speckles

Content-Key: 186007

Url: https://administrator.de/contentid/186007

Printed on: April 26, 2024 at 21:04 o'clock

Mitglied: 64748
64748 Jun 05, 2012, updated at Jun 06, 2012 at 17:52:38 (UTC)
Goto Top
Hallo speckles

+2.147.483.647 ist 1111111111111111111111111111111 = 2^31-1
+4.294.967.295 ist 11111111111111111111111111111111 = 2^32-1

Markus
Member: Kaioshin
Kaioshin Jun 05, 2012 updated at 21:26:10 (UTC)
Goto Top
Hallo speckles

Ich hatte eigentlich gelernt, das wenn das erste Bit 1
ist, ist die Zahl negativ, ansonsten positv.

Wenn das geringwertigste Bit (lsb für least significant bit) auf 1 steht, so handelt es sich um eine negative Zahl.
1111 = 15
1110 = 14

Ich glaube du meintest mit dem ersten Bit das höchstwertigste Bit (msb für most significant bit), wobei diese Regel bei diesem Bit nicht anzuwenden ist.

Meine Vermutung war dann, das dieses Phänomen etwas mit signed und unsigned zutun haben könnte, was bedeuten würde, > das "int" im besonderen Fall statt negativ Zahlen den Wert 4.294.967.295 darstellen könnte.

Dazu folgenden Link, http://openbook.galileocomputing.de/it_handbuch/kap_02_math_tech_002.ht ... (scroll etwas weiter oben zu "Dualzahlen mit Vorzeichen"). face-smile


Kaioshin
Member: speckles
speckles Jun 06, 2012 at 17:50:34 (UTC)
Goto Top
Hallo ihr beiden,

vielen Dank für eure Hilfestellungen. Ich glaube ich habe die Richtung verstanden in die es geht.

Ich habe mir einen Merksatz gebaut, indem ich versuche die oben beschriebenen Tipps umzusetzten:
1.) Wird ein (signed) vorzeichenbehafteter Wert verlangt, wird das vorderste bit (msb) abgetrennt und als Vorzeichenbit benutzt. Wird der Datentyp als unsigned übergeben, wird das msb bit zum bilden von hohen Werten benötigt und die Regel: Eine 1 am msb bit bedeutet nicht eine negative Zahl!


Was jedoch zu dem unten beschrieben steht, stimme ich bislang noch nicht überein. Ich bin weiterhin der Meinung, das das msb als Vorzeichenbit benutzt wird, da das lsb für die Bildung von z.B. -1 nötig wäre.


Zitat von @Kaioshin:
Wenn das geringwertigste Bit (lsb für least significant bit) auf 1 steht, so handelt es sich um eine negative Zahl.
1111 = 15
1110 = 14

Ich glaube du meintest mit dem ersten Bit das höchstwertigste Bit (msb für most significant bit), wobei diese Regel bei
diesem Bit nicht anzuwenden ist.
Mitglied: 64748
64748 Jun 06, 2012 updated at 18:00:22 (UTC)
Goto Top
Guten Abend,

Du solltest vor allem zu Kenntnis nehmen, dass diese Darstellung von verschiedenen Faktoren abhängt (Programmiersprache, Architektur, Compiler usw.). Hier http://de.wikipedia.org/wiki/Integer_(Datentyp) ist einiges beschrieben.

Auf jeden Fall solltest Du noch andere Quellen zu Rate ziehen!

Markus
Member: Kaioshin
Kaioshin Jun 06, 2012 at 20:22:50 (UTC)
Goto Top
Hallo face-smile

[...] Eine 1 am msb bit bedeutet nicht eine negative Zahl! [...]
Eine 1 am msb ist keine Regel für eine ungerade Zahl! Weil das msb selbst eine gerade Zahl ist und somit nicht dazu beitragen kann dass eine bereits gerade Zahl ungerade wird. Beim lsb (2^0 = 1) ist es da natürlich anders.

[...] das das msb als Vorzeichenbit benutzt wird, da das lsb für die Bildung von z.B. -1 nötig wäre.
Ja das ist richtig. http://de.wikipedia.org/wiki/Zweierkomplement (Da wirds nochmal recht gut erklärt).


Kaioshin