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

存储类型的疑惑解决办法

2012-02-21 
存储类型的疑惑 //在vc6.0中#inlcudeiostream.hvoidmain(){//他们都只显示8个字节cout sizeof(long

存储类型的疑惑

//在vc6.0中

#inlcude   <iostream.h>
  void   main()
{  
              //   他们都只显示8个字节
            cout < < "sizeof(long   double)   = " < <sizeof(long   double) < <endl;
            cout < < "sizeof(double)= " < <sizeof(double) < <endl;
            double   number=1000000000000000000;//超过节
            cout < < "number   is   " < <number < <endl;  
              //他们可以保存19位呢...
              //   但是我想保存比他更大的数据怎么办呢...
              //  
}

谁能给我说说一下关于类型的问题呢
           


[解决办法]
从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度。

任何数据在内存中都是以二进制(0或1)顺序存储的,每一个1或0被称为1位,而在x86CPU上一个字节是8位。比如一个16位(2字节)的short int型变量的值是1000,那么它的二进制表达就是:00000011 11101000。由于Intel CPU的架构原因,它是按字节倒序存储的,那么就因该是这样:11101000 00000011,这就是定点数1000在内存中的结构。

目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算。这种结构是一种科学计数法,用符号、指数和尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号。下面是具体的规格:

````````符号位 阶码 尾数 长度
float 1 8 23 32
double 1 11 52 64
临时数 1 15 64 80

由于通常C编译器默认浮点数是double型的,下面以double为例:
共计64位,折合8字节。由最高到最低位分别是第63、62、61、……、0位:
最高位63位是符号位,1表示该数为负,0正;
62-52位,一共11位是指数位;
51-0位,一共52位是尾数位。

热点排行
Bad Request.