#include<iostream>
using namespace std;int main()
{
float a=10;
cout<<(int&)a<<endl;
return 0;
}为什么用long 定义a输出的就对了急啊,面试题

解决方案 »

  1.   

    应该是long和int的每个bit的定义一样
    而float类型跟int型的每个bit的定义是不一样的
      

  2.   

    float a=10; 
    做了这不以后,实际a已经是个浮点数,不再是10
      

  3.   

    float与long型变量的比特数都是32,而int型是16,在强制转换过程中必然会有精度损失。
    个人观点,不见得对。
      

  4.   

    不是在VC下是32位,而是在32位平台下int和long都是32位。
      

  5.   

    是不是float和int,在计算机中的存储方式不一样造成的呢,我在网上找了好多关于这方成的内容,解释有好多种,都不知道哪个对,晕了
      

  6.   

    存储方式不同。int/long型的存储结构很简单,就是2进制数的值。float的要复杂一些,你可以早点float存储结构的资料看看
      

  7.   

    void main() {
    //最高位是符号位。 接下来的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)));
    }
    }