usigned int x=1;
signed int y = -1;
double z = y * x * 0.25;
Microsoft Visual Studio 10 C++ コンパイラを使用しています。z に -0.25 の値がないのはなぜですか? 逆アセンブルから見たように、signed int の乗算 (imul) を作成し、edx からの結果をスタックに配置し、unsigned int であるため 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]
signed * unsigned の乗算結果が unsigned と解釈されるのはなぜですか?