int a = -0x80000000;
cout<<"a1="<<a<<endl;
cout<<"a2="<<-0x80000000<<endl;
这个代码的输出结果是什么?
已知2^31=2147483648
结果:
a1 = -2147483648
a2= 2147483648
答案为什么是这样呢?
-0x80000000在内存中以补码形式存储,二进制为:1000 0000 0000 .....0000
通过查看反汇编,如下:
int a = -0x80000000;
00A21A6E mov dword ptr [a],80000000h
cout<<"a1 = "<<a<<endl;
00A21A75 mov esi,esp
00A21A77 mov eax,dword ptr [__imp_std::endl (0A2A318h)]
00A21A7C push eax
00A21A7D mov edi,esp
00A21A7F mov ecx,dword ptr [a]
00A21A82 push ecx
00A21A83 push offset string "a1 = " (0A27908h)
00A21A88