Ciò si verifica perché input
comprende più di quattro bit. Se assumiamo che input
è un signed char
, con 8 bit (o un byte), allora:
input == 15 == 0x0F == 0b00001111
Come si può vedere, i 4 bit più significativi di input
sono tutti 0. Dopo un'operazione NOT di bit (~), abbiamo:
~input == -16 == 0xF0 == 0b11110000
I quattro bit che prima erano zero ora sono quelli, e quelli sono ora zero. Il bit più significativo in una variabile firmata determina il suo segno (0 è positivo e 1 è negativo). Quindi, capovolgendo i bit il segno è stato invertito. Il numero negativo può essere letto come:
1 1 1 1 0 0 0 0
-128 + 64 + 32 + 16 + 0 + 0 + 0 + 0
che risolve il -16 che è stato stampato.
Se i tuoi compiti sono azzerare una variabile usando NOT bit a bit, prova a dichiarare input
come unsigned char
per evitare di doversi preoccupare del bit del segno. Quindi, impostare input
su 255
, il valore più alto che una variabile a 8 bit può contenere (0xFF
o 0b11111111
).
fonte
2012-08-23 04:06:02
Hai dimenticato le virgolette nel formato '% d'; Li ho aggiunti. –
grazie .... Ero un po 'isterico e ho dimenticato di aggiungere quello .... – Mizmor
Generalmente è meglio copiare e incollare il tuo codice di lavoro effettivo; che evita accuratamente errori di battitura e errori simili. –