Hallo,
ich habe ein bißchen mit der bitweisen Invertierung rumprobiert und mir ist etwas aufgefallen, das ich nicht verstehe. Der folgende Schnipsel bestimmt die größte positive signed short Zahl:
Ob er gut geschrieben ist sei dahingestellt, aber er funktioniert ;-)
Jetzt dachte ich mir, ich fasse die Zeilen 2 und 3 zusammen und, was soll ich dsagen, es funktioniert nicht.
Ich bekomme jetzt -1 als Ergebnis, statt 32767. Mit ein bißchen rumprobieren und dem Gebrauch anderer Zahlen, habe ich festegestellt, dass er im letzten Fall statt mit einer '0' mit einer '1' von links auffüllt, obwohl zahl als unsigned short deklariert wurde.
Meine Frage: Wieso wird in diesem Fall mit einer 1 aufgefüllt? Liegt es daran, dass ich die invertierte Zahl vorher nicht explizit als unsigned zwischenspeichere und somit davon ausgegangen wird, da das höchstwertigste Bit eine 1 ist, dass es sich um eine negative Zahl handelt und somit mit einer 1 aufgefüllt wird?
Viele Grüße
schiese
ich habe ein bißchen mit der bitweisen Invertierung rumprobiert und mir ist etwas aufgefallen, das ich nicht verstehe. Der folgende Schnipsel bestimmt die größte positive signed short Zahl:
C++:
unsigned short zahl = 0;
unsigned short zahl2 = ~zahl;
unsigned short zahl3 = zahl2 >> 1;
signed short zahl_negiert_signed = static_cast<signed short>(zahl3);
std::cout << "Zahl: " << zahl << " Invertiert: " << zahl_negiert_signed << std::endl;
Jetzt dachte ich mir, ich fasse die Zeilen 2 und 3 zusammen und, was soll ich dsagen, es funktioniert nicht.
C++:
unsigned short zahl = 0;
unsigned short zahl2 = (~zahl) >> 1;
signed short zahl_negiert_signed = static_cast<signed short>(zahl2);
std::cout << "Zahl: " << zahl << " Invertiert: " << zahl_negiert_signed << std::endl;
Meine Frage: Wieso wird in diesem Fall mit einer 1 aufgefüllt? Liegt es daran, dass ich die invertierte Zahl vorher nicht explizit als unsigned zwischenspeichere und somit davon ausgegangen wird, da das höchstwertigste Bit eine 1 ist, dass es sich um eine negative Zahl handelt und somit mit einer 1 aufgefüllt wird?
Viele Grüße
schiese