Frage zu bitweise Not
-
Hallo,
und zwar bin ich grade dabei meine C Kenntnise zu erweitern.
Ich habe aber ein Problem mit dem Verständnis des Not(~) Operators.
Das hier steht in meinem Buch:Der NOT-Operator (~) wirkt sich auf Zahlen so aus, dass er jedes einzelne Bit invertiert. Bei vorzeichenbehafteten Datentypen entspricht das einer Negation mit anschließender Subtraktion von 1
Beispiel:
#include <stdio.h> int main() { int x = 2; x = ~x; printf ("%i",x); return 0; }
Normaler weise müsste ich als Ausgabe '253' erhalten.
Ich erhalte aber als Ausgabe -3.Irgendwas verstehe ich laut Regel nicht:
BitA ~BitA
0 1
1 0Müsste doch folgendes heißen:
00000010 ~ 11111101
Ich hoffe jemand kann mir weiter helfen.
-
^^ nimm 'unsigned char', dann sollte es klappen.
-
Ah es geht.
Aber warum geht es nicht mit nem Integer?
-
11111101 entspricht -3 in 2er-Komplementdarstellung, nachzulesen auf: http://de.wikipedia.org/wiki/Zweierkomplement
-
Dieser Artikel erklärt, warum das Ergebnis bei vorzeichenbehafteten Integers so ist, wie es ist:
http://de.wikipedia.org/wiki/ZweierkomplementEdit: mal wieder zu langsam.
-
Galolei schrieb:
Aber warum geht es nicht mit nem Integer?
geht auch, aber du müsstest die oberen bits weglöschen, weil ~die alle ja auf 1 setzt.
printf ("%i", x & 0xff);