Esto ocurre porque input
se compone de más de cuatro bits. Si asumimos que es un input
signed char
, con 8 bits (o un byte), entonces:
input == 15 == 0x0F == 0b00001111
Como se puede ver, los 4 bits más significativos de input
son todos 0. Después de un bit a bit operación NOT (~), tenemos:
~input == -16 == 0xF0 == 0b11110000
los cuatro bits que solían ser cero ahora son queridos, y los ceros son ahora. El bit más significativo en una variable con signo determina su signo (0 es positivo y 1 es negativo). Por lo tanto, al voltear los bits, el signo se ha invertido. El número negativo se puede leer como:
1 1 1 1 0 0 0 0
-128 + 64 + 32 + 16 + 0 + 0 + 0 + 0
que resuelve al -16 que fue impreso.
Si su tarea es poner a cero una variable utilizando el NOT bit a bit, intente declarar input
como unsigned char
para evitar tener que preocuparse por el bit de signo. A continuación, establezca input
en 255
, el valor más alto que puede contener una variable de 8 bits (0xFF
o 0b11111111
).
Olvidó las comillas en el formato '% d'; Los he agregado. –
gracias .... Estaba un poco histérica y olvidé agregar que .... – Mizmor
En general, es mejor copiar y pegar el código de trabajo real; que cuidadosamente evita errores tipográficos y similares. –