Logische Operatoren auf Bitebene?
Ich habe eine Frage zu der folgenden Aufgabe:
uint byte_1 = 165;
uint byte_2 = 200;
byte_1 = ~byte_1;
byte_2 = byte_2 >>3;
Sprich byte_1 müsste doch jetzt 90 sein. Und byte_2 = 25 oder?
Warum kommt dann bei:
(byte_1 > 200) & (byte_2 < 180) = True
(byte_1 < 200) | (byte_2 > 180) = False
(byte_1 < 200) ^ (byte_2 > 180) = false
3 Antworten
Vom Beitragsersteller als hilfreich ausgezeichnet
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Programm, programmieren, Informatik
Es liegt am Typ, die Zahlen sind vorzeichenlos (unsigned). Wenn du dir das Ganze einmal in einem Programm ausgeben lässt, bekommst du für byte_2 die Zahl 4294967130D zurück. Siehe hier.
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
programmieren, Informatik
Es gibt keine logischen Operatoren auf Bitebene. Es gibt Bitarithmetik und es gibt logische Operatoren.
logische Operatoren sind &&,||,!
Bitarithmetik sind: &,|,^,~,>>,<<
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Informatik
byte_1 müsste doch jetzt 90 sein.
Nee, es ist jetzt UINT_MAX-165. Im C-Standard ist das mindestens 65270.