可能有错误的标题,但我不知道如何描述它。
int x=0x4a;
h=!(0x80000000000&(0x39+(~x+1)));
结果是h = 0。 问题是x有32位,而0x80000000000有32位以上。如果我将变量i设置为0x80000000000并将其打印为十六进制格式,则它将显示0.因此,在这种情况下,为什么h的结果为1,因为0x80000000000变为0?
我使用的语言是C
答案 0 :(得分:1)
0x8000000000是long long int
常量。因此,C编译器将算术表达式中的类型提升到表达式中出现的最高精度。
如果你写了:
int x=0x4a;
int h1=(0x80000000000&(0x39+(~x+1)));
int h = !h1;
然后h
将变为1.并且可能会发出关于缺失精度的警告。