小编asu*_*asu的帖子

Microsoft C++编译器有错误吗?

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的乘法结果被解释为无符号?

c++ visual-studio-2010 visual-c++

1
推荐指数
2
解决办法
399
查看次数

标签 统计

c++ ×1

visual-c++ ×1

visual-studio-2010 ×1