取反之后为什么是负数

👁️ 29 人浏览 💬 0 人评论 ❤️ 添加收藏

~ 把每一位都翻过来。可 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 只负责运行后在画布上显示中间值,不影响输出和判题,不用改。

提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论
🔒 登录并作答后可看讨论