c初学者的问题

时间:2010-09-16 07:45:29

标签: c

main()
{
  int x=5,y=3;
  x=x+~y+1;
  printf("%d",x);
}

输出是什么?

1 个答案:

答案 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