main()
{
int x=5,y=3;
x=x+~y+1;
printf("%d",x);
}
输出是什么?
答案 0 :(得分:4)
如果您的问题是“输出是什么?”,为什么不直接输入并测试呢?
#include <stdio.h>
int main (void) {
int x=5,y=3;
x = x + ~y + 1;
printf ("%d\n", x);
return 0;
}
这会在我的系统上输出2
。您的系统如何?
如果您打印出y
和~y
,则会分别获得3
和-4
(在二进制补码架构上)。
那是因为,使用二进制补码,你可以通过反转所有位然后加1.来得到数的负数。所以~y + 1
(代号为“反转所有位”)实际上是-y
x + ~y + 1
= x + (~y + 1)
= x + (-y)
= x - y
= 5 - 3
= 2
旁白:我认为ISO实际上并没有强制要求存储数字的基础二进制补码架构,因此可能无法在所有实现上运行。但是,自从我看到这样一只野兽以来,已经有很长一段时间了。而且,说实话,如果你想得到一个数字的负数,你为什么不只使用-y
?