32 Bit Zahlen mit und ohne Vorzeichen?
Hallo Freunde,
ich habe folgenden Algorithmus (siehe Bild ). In der Aufgabe wird erst gefragt, was ausgegeben wird ,wenn wir für i 32 Bit Zahlen ohne Vorzeichen und dann mit Vorzeichen betrachten . Eigentlich müssten wir ja bei beiden das gleiche Ergebnis haben oder irre ich mich da? Das Programm wird ja abgebrochen sobald i =0 ist. Somit können wir ja negative i gar nicht betrachten

3 Antworten
0000 0000 0000 0000 0000 0000 0000 0001
*2
->
0000 0000 0000 0000 0000 0000 0000 0010
*2
->
0000 0000 0000 0000 0000 0000 0000 0100
usw. Eine Multiplikation von 2 bedeutet eine Verschiebung um eine Bitstelle.
Am Ende würdest du auf folgenden Wert kommen:
8000 0000
Für n ohne Vorzeichen wäre n in Dezimal:
(ohen Vz) n = 2147483648
Um den Wert für n mit Vorzeichen zu erhalten musst du in dem Fall das 2er Kompliment bilden:
(mit Vz) n = -2147483648 [Der Prozessor würde hier den sog. OF (overflow Bit setzen), da ja etwas positives * 2 ncihts negatives ergeben dürfte]
Eigentlich müssten wir ja bei beiden das gleiche Ergebnis haben oder irre ich mich da?
Du irrst dich. Ich habe mal in C++ ein Beispiel entworfen
#include <iostream>
using namespace std;
int main(void)
{
unsigned short int i = 31;
unsigned long long int n = 1;
while (i >= 1)
{
n = n * 2;
cout << "i: " << i << " n:" << n << endl;
i -= 1;
}
cin.get();
return 0;
}
Das Resultat
i: 31 n:2
i: 30 n:4
i: 29 n:8
i: 28 n:16
i: 27 n:32
i: 26 n:64
i: 25 n:128
i: 24 n:256
i: 23 n:512
i: 22 n:1024
i: 21 n:2048
i: 20 n:4096
i: 19 n:8192
i: 18 n:16384
i: 17 n:32768
i: 16 n:65536
i: 15 n:131072
i: 14 n:262144
i: 13 n:524288
i: 12 n:1048576
i: 11 n:2097152
i: 10 n:4194304
i: 9 n:8388608
i: 8 n:16777216
i: 7 n:33554432
i: 6 n:67108864
i: 5 n:134217728
i: 4 n:268435456
i: 3 n:536870912
i: 2 n:1073741824
i: 1 n:2147483648
i1 würde einen Pufferüberlauf bei einem signed int liefern. Mit deinem unsigned int würde das Problem nicht auftreten. Ebenfalls wäre es sowohl für signed, wie auch unsigned kein Problem, wenn der Datentyp ein long long int ist.
Soweit ich noch weiß, ist die Bitstelle vor der 32-Bitzahl mit 0 und 1 die positive bzw. nehgative Zahl, also die 33.Stelle.