usigned int x=1;
signed int y = -1;
double z = y * x * 0.25;
Run Code Online (Sandbox Code Playgroud)
我正在使用Microsoft Visual Studio 10 C++编译器.为什么z没有-0.25值?正如我从反汇编中看到的那样,它使得一个有符号的int乘法(imul),将edx的结果放在堆栈上,并用0!扩展它,因为它将是一个unsigned int.之后,它使用FP指令将其相乘.
.............
imul edx,dword ptr [ecx]
mov dword ptr [ebp-98h],edx
mov dword ptr [ebp-94h],0
fild dword ptr [ebp-98h]
fmul qword ptr [__real@3fd0000000000000 (1402FB8h)]
fstp qword ptr [z]
Run Code Online (Sandbox Code Playgroud)
为什么signed*unsigned的乘法结果被解释为无符号?