首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

再发贴C/C++中强制类型转换的实现过程

2012-04-06 
再发贴求助:C/C++中强制类型转换的实现过程上次发贴就问过这个问题,但是没找到足够满意的答案,所以再发贴。

再发贴求助:C/C++中强制类型转换的实现过程
上次发贴就问过这个问题,但是没找到足够满意的答案,所以再发贴。
int x = 0X7fffffff;
cout << (int)(float)x; //就是这个转换过程没理解
float y = x;
cout << (int)y;
这两次输出的值是不一样的。上次有人给我回复说是某个强制类型转换的内部函数的参数实际上是double型,所以精度是足够的(第一次的输出结果),还是输出0x7fffffff。但是我一直有个疑问,(float)x这个过程,编译器到底做了什么?是直接在x的位置上直接改成float的表示形式???如果是这样,结果就不应该是0x7fffffff了。
求高人扫盲!!!最好能从底层的函数讲讲

[解决办法]
反汇编

Assembly code
int x = 0X7fffffff;00411E8E  mov         dword ptr [x],7FFFFFFFh cout << (int)(float)x; //就是这个转换过程没理解00411E95  fild        dword ptr [x] 00411E98  call        @ILT+440(__ftol2_sse) (4111BDh) 00411E9D  mov         esi,esp 00411E9F  push        eax  00411EA0  mov         ecx,dword ptr [__imp_std::cout (41D3E8h)] 00411EA6  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (41D430h)] 00411EAC  cmp         esi,esp 00411EAE  call        @ILT+645(__RTC_CheckEsp) (41128Ah) float y = x;00411EB3  fild        dword ptr [x] 00411EB6  fstp        dword ptr [y] cout << (int)y;00411EB9  fld         dword ptr [y] 00411EBC  call        @ILT+440(__ftol2_sse) (4111BDh) 00411EC1  mov         esi,esp 00411EC3  push        eax  00411EC4  mov         ecx,dword ptr [__imp_std::cout (41D3E8h)] 00411ECA  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (41D430h)] 00411ED0  cmp         esi,esp 00411ED2  call        @ILT+645(__RTC_CheckEsp) (41128Ah)
[解决办法]
无汇编,无真相!

热点排行