关于运营商“&”的问题

时间:2012-06-02 13:04:03

标签: c operators int

可能有错误的标题,但我不知道如何描述它。

int x=0x4a;
h=!(0x80000000000&(0x39+(~x+1)));

结果是h = 0。 问题是x有32位,而0x80000000000有32位以上。如果我将变量i设置为0x80000000000并将其打印为十六进制格式,则它将显示0.因此,在这种情况下,为什么h的结果为1,因为0x80000000000变为0?

我使用的语言是C

1 个答案:

答案 0 :(得分:1)

0x8000000000是long long int常量。因此,C编译器将算术表达式中的类型提升到表达式中出现的最高精度。

如果你写了:

  int x=0x4a;
  int h1=(0x80000000000&(0x39+(~x+1)));
  int h = !h1;

然后h将变为1.并且可能会发出关于缺失精度的警告。