32 Bit Zahlen mit und ohne Vorzeichen?

Aufgabe b  - (Mathematik, programmieren, Informatik)

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.