#include<iostream>
using namespace std;int main()
{
float a=10;
cout<<(int&)a<<endl;
return 0;
}为什么用long 定义a输出的就对了急啊,面试题
using namespace std;int main()
{
float a=10;
cout<<(int&)a<<endl;
return 0;
}为什么用long 定义a输出的就对了急啊,面试题
而float类型跟int型的每个bit的定义是不一样的
做了这不以后,实际a已经是个浮点数,不再是10
个人观点,不见得对。
//最高位是符号位。 接下来的8位代表指数,注意值为2^(n-127)。最后23为代表基数,基数值在1到2之间,0对应的一,最大值+1 = 0x00800000代表2。
unsigned int *pi1 = NULL;
unsigned int i1 = 0;
float f1 = 0.0;
int sign = 0;//正数
int indexNum = 0; //2^n
float baseNum = 0; // 1+1*(baseNum/0x8fffff) 1-2之间的数
while(1)
{
scanf(_T("%f"), &f1);
pi1 = (unsigned int *)&f1;
i1 = *pi1;
sign = ((i1 & 0x80000000) >> 31);
indexNum = ((i1 & 0x7f800000) >> 23) - 127;
baseNum = ((i1 & 0x007fffff)*1.0/0x00800000) + 1; printf(_T("\nfloat: %f, int 0X%08X. sign is %d, base:%f, index:%d\n"), f1, *pi1, sign, baseNum, indexNum);
printf(_T("\n2^%d * %f = %s%f \n\n"), indexNum, baseNum, sign?_T("-"):_T(""),
(indexNum > 0) ? (1 << indexNum)*baseNum : baseNum/(1 << (-1*indexNum)));
}
}