取反之后为什么是负数
~ 把每一位都翻过来。可 int 有 32 位:5 是 0000…0000 0101,取反后是 1111…1111 1010,最高位变成了 1。
int 用补码存负数:最高位是 1 就表示负数,而且正好 ~x == -x - 1。所以 ~5 用 %d 输出是 -6。
我们多半只关心最低的 8 位,就在后面加 & 0xFF:0x 开头是十六进制,0xFF 等于 255,二进制是 8 个 1,和它按位与就把高位全清成 0、低 8 位原样留下。
输入一个 0~255 的整数 a,输出 ~a 的低 8 位(十进制)。例如输入 5,输出:
250
先运行,看画布上蓝色一行(a)和黄色一行(~a)的低 8 位,再改一处让输出正确。
代码里以 @youci 开头的 printf 只负责运行后在画布上显示中间值,不影响输出和判题,不用改。