VC++中有关float和int的问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 08:42:29
本人在准备二级的奋斗中,遇到一个小问题,请哪位编程大虾指点迷津哈....
#include <iostream.h>
void main()
{
int a=1;
int c=(++a)*(++a);
cout<<c<<endl;
}
输出为9...
#include <iostream.h>
void main()
{
float a=1;
int c=(++a)*(++a);
cout<<c<<endl;
}
这时输出就为6了.....
#include <iostream.h>
void main()
{
float a=1;
int c=++a*++a;
cout<<c<<endl;
}
这是输出又为9了.....
很是无语,也不知a为整型或实型以及加不加小括号咋就有这样的区别???

你可以从汇编查看器查看运行步骤:
int a =1; c = (++a)*(++a); 时候
0040158F mov eax,dword ptr [ebp-4]
00401592 add eax,1
00401595 mov dword ptr [ebp-4],eax
00401598 mov ecx,dword ptr [ebp-4]
0040159B add ecx,1
0040159E mov dword ptr [ebp-4],ecx
004015A1 mov edx,dword ptr [ebp-4]
004015A4 imul edx,dword ptr [ebp-4]
004015A8 mov dword ptr [ebp-8],edx

float a =1; c = (++a)*(++a); 时候
0040159F fld dword ptr [ebp-4]
004015A2 fadd dword ptr [__real@4@3fff8000000000000000 (0046f020)]
004015A8 fst dword ptr [ebp-4]
004015AB fld dword ptr [ebp-4]
004015AE fadd dword ptr [__real@4@3fff8000000000000000 (0046f020)]
004015B4 fst dword ptr [ebp-4]
004015B7 fmulp st(1),st
004015B9 call __ftol (00420d28)
004015BE mov dword ptr [ebp-8],eax