Dies geschieht, weil input
von mehr als vier Bits besteht. Wenn wir davon ausgehen, dass input
ist ein signed char
, mit 8 Bit (oder ein Byte), dann gilt:
input == 15 == 0x0F == 0b00001111
Wie Sie sehen können, die 4 höherwertigen Bits von input
sind alle 0. Nach einer bitweise NOT-Operation (~), wir haben:
~input == -16 == 0xF0 == 0b11110000
Die vier Bits, die früher Null waren, sind jetzt Einsen, und die sind jetzt Nullen. Das höchstwertige Bit in einer vorzeichenbehafteten Variablen bestimmt sein Vorzeichen (0 ist positiv und 1 ist negativ). Durch Umdrehen der Bits wurde das Vorzeichen umgekehrt.
1 1 1 1 0 0 0 0
-128 + 64 + 32 + 16 + 0 + 0 + 0 + 0
die die -16 löst, die gedruckt wurde: Die negative Zahl als gelesen werden.
Wenn Ihre Hausaufgabe darin besteht, eine Variable mit dem bitweisen NOT auf Null zu setzen, versuchen Sie, input
als unsigned char
zu deklarieren, damit Sie sich nicht um das Vorzeichen-Bit kümmern müssen. Dann setzte input
zu 255
, den höchsten Wert ein 8-Bit-Variable halten können (0xFF
oder 0b11111111
).
Sie haben die Anführungszeichen im '% d' Format vergessen; Ich habe sie hinzugefügt. –
danke .... Ich war etwas hysterisch und habe vergessen, das hinzuzufügen .... – Mizmor
Es ist im Allgemeinen am besten, kopieren Sie und fügen Sie Ihren tatsächlichen Arbeitscode; das vermeidet Tippfehler und ähnliche Fehler sauber. –