usigned int x=1;
signed int y = -1;
double z = y * x * 0.25;
我正在使用 Microsoft Visual Studio 10 C++ 编译器。为什么 z 没有 -0.25 值?正如我从反汇编中看到的那样,它进行有符号整数乘法(imul),将 edx 的结果放在堆栈上,并用 0! 扩展它,因为它将是一个无符号整数。之后,它使用 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]
为什么有符号*无符号的乘法结果被解释为无符号?