float转int的有关问题

float转int的问题
float   fTest   =   1.234567e14;
int   nTest   =   0;
nTest   =   fTest;

这样的赋值会把浮点数的哪几位赋给整型呢?谢谢!

------解决方案--------------------
把 float 的整数部分取出,
然后取这个整数部分末尾的 sizeof(int) 字节的数据 。
------解决方案--------------------
溢出很多,一个FLOAT
(FLOAT)FF FF FF FF FF FF FF FF
(int) 00 00 00 00只能拿到最后四位(sizeof(int)=4)
你的数据弄进去自己看看 啊~
------解决方案--------------------
浮点数到整数是一个复杂的过程:看看吧,我也解释不太清楚,没有专门研究过,只是泛泛而谈,不想误人子弟:
//
// 将32位浮点数fval转换为32位整数并存储在ival中
// 小数部分将被裁剪掉
//
void TruncToInt32 (int &ival, float fval)
{
ival = *(int *)&fval;

// 提取尾数
// 注意实际的尾数前面还有一个被省略掉的1
int mantissa = (ival & 0x07fffff) | 0x800000;

// 提取指数
// 以23分界,指数大于23则左移,否则右移
// 由于指数用偏移表示,所以23+127=150
int exponent = 150 - ((ival > > 23) & 0xff);

if (exponent < 0)
ival = (mantissa < < -exponent);
else
ival = (mantissa > > exponent);

// 如果小于0,则将结果取反
if ((*(int *)&fval) & 0x80000000)
ival = -ival;
}

------解决方案--------------------
2^30 = 1073741842
2^31 = -2147483648
除了负号,正好2倍。
int 的范围是到2^31-1,
2^31就溢出了。

int 类型二进制中头一个数
是记录正负的0为正数。1为负数。溢出后 第一个数就变成了1,1被当做负数的标志。就会出现 - 号。
然后就是出现。-2147483648。

计算2 的n次幂
#include<stdio.h>
int main(int argc,char*argv[])

{
int a = 2;
int i = 0;
int n = 0;
printf( "计算2的n次幂!\n请输入数字n:" );
scanf( "%d",&n );
for( i = 2;i<=n;i++)
{
a*=2;
}
printf( "%d\n",a );
}
 
可以试试。
------解决方案--------------------
11100000 10010001 00000001 01111111 01001110 0000000原来的数
存储到float时只用到了前24位,第一位不存储,这样
11100000 10010001 00000000,00000000 00000000 0000000(实际存储逗号前的23位,后面的丢失)
这样当转换为4字节整数时就得到了上面数的后32位即(其实上面24位以后的不存在,通过移位补上的)
1 00000000 00000000 00000000 0000000 十进制为-2147483648 
如果是8字节整数(__int64)的话
应该能存下
11100000 10010001 00000000,00000000 00000000 0000000,十进制为123456695828480
是个约等于原数的值,因为浮点的时候截断了一部分