Jak*_*ake 1 c++ variables unsigned-integer
unsigned__int64 difference;
difference=(64*33554432);
printf ("size %I64u \n", difference);
difference=(63*33554432);
printf ("size %I64u \n", difference);
Run Code Online (Sandbox Code Playgroud)
第一个#非常大.第二个数字是正确的答案.如何将它从62改为63会导致这种变化?
第一个值是18446744071562067968第二个值是2113929216
对不起,值为64和63,而不是63和62.
除非另有限定,否则整数文字属于类型int.我认为在你所使用的平台上,一个int是32位.因此计算(64*33554432)溢出并变为负数.然后你把它转换成a unsigned __int64,所以这现在被翻转回一个非常大的正整数.
瞧:
int main()
{
int a1 = (64*33554432);
int a2 = (63*33554432);
printf("%08x\n", a1); // 80000000 (negative)
printf("%08x\n", a2); // 7e000000 (positive)
unsigned __int64 b1 = a1;
unsigned __int64 b2 = a2;
printf("%016llx\n", b1); // ffffffff80000000
printf("%016llx\n", b2); // 000000007e000000
}
Run Code Online (Sandbox Code Playgroud)