Frage von Kirra1, 24

welche Ausgabe liefert folgende Anweisungen?

Welchen Wert vom Datentyp signed short liefern folgende Programmzeilen bei Ausgabe des Wertes als Dezimalzahl zurück? Bitte tragen Sie das Ergebnis ins Aufgabenblatt ein

signed short wert, a; wert = 0xFFFF - 3; wert = 8 | 3;

ich habe folgendes bei dem Programm gekriegt : 1) -4 2) 11

ich verstehe aber nicht warum ?? bei a) warum nicht 65533 bei 2) warum 11 ?

Antwort
von PWolff, 9

a): (65532 statt 65533)

Kennst du die Zweierkoomplement-Darstellung binärer Zahlen?

Wenn etwas erstaunlich ist, dann dies, dass

signed short wert; wert = 0xFFFF - 3

keinen typecast-Fehler ergibt - 0xFFFF ist als unsigned short, aber nicht als signed short darstellbar.

Daraus kann man schließen, dass entweder die verwendete Programmiersprache keine Typüberprüfungen kennt oder in den Compilereinstellungen die Typüberprüfung abgeschaltet ist.

b): | ist ein bitweiser Operator.

Weißt du, wie Zahlen computerintern dargestellt werden (als Binärzahlen)?

Antwort
von ralphdieter, 14

Zu a:

signed short hat mindestens 16 Bit (-32768..32767). Die Zahl 65535-3=65532 ist dann zu groß, und das Ergebnis ist nicht definiert. Dein Compiler rechnet offenbar modulo 65536 (was nicht sehr überrascht). Legt ein anderer Compiler short mit 32 Bit ab, käme sicher 65532 heraus.

Zu wert:

Der senkrechte Strich ist die bitweise Veroderung der Zahlen in Binärdarstellung. Aus 8=001000₂ und 3=000011₂ wird also 001011₂ (=11).

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten