C(1)—— 数据在内存中的存放形式

一、数据在内存中的存放方式

数据在存放到内存里的时候,有两种存放方式,即:Big Endian 和 Little Endian

  • Big Endian(大端模式/网络字节序):内存中的高位存放数据的低位,内存中的低位存放数据的高位
  • Little Endian(小端模式/主机字节序/反字节序):内存中的高位存放数据的高位,内存中的低位存放数据的低位

注:PowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据

为了更好理解,比如数字0x12345678在两种不同字节序CPU中的存储顺序如下所示:

  • Big Endian(符合正常的思维习惯)  

    低地址 -----------------------------------------------------------------------------> 高地址
        |    12   |    34   |    56   |   78   |

  • Little Endian

    低地址 -----------------------------------------------------------------------------> 高地址
        |    78   |    56   |   34   |   12   |

由此,我们可以通过共用体来判断一台机器使用的存储方式,因为共用体的存放顺序是所有成员从低地址开始存放。

 

二、浮点数在内存中的存储方式

对于浮点数在内存是如何存储的,目前所有的C/C++编译器都是采用IEEE所制定的标准浮点格式,即二进制科学表示法。

在二进制科学表示法中,S=M*2^N 主要由三部分构成:符号位+阶码(N)+尾数(M)。对于float型数据,其二进制有32位,其中符号位1位,阶码8位,尾数23位;对于double型数据,其二进制为64位,符号位1位,阶码11位,尾数52位。

  • 符号位:0表示正,1表示负
  • 阶码:这里阶码采用移码表示,对于float型数据其规定偏置量为127,阶码有正有负,对于8位二进制,则其表示范围为-128-127,double型规定为1023,其表示范围为-1024-1023。比如对于float型数据,若阶码的真实值为2,则加上127后为129,其阶码表示形式为10000010
  • 尾数:有效数字位,即部分二进制位(小数点后面的二进制位),因为规定M的整数部分恒为1,所以这个1就不进行存储了。

 

下面举例说明:

float型数据125.5转换为标准浮点格式是什么?

答:125二进制表示形式为1111101,小数部分表示为二进制为 1,则125.5二进制表示为1111101.1,由于规定尾数的整数部分恒为1,则表示为1.1111011*2^6,阶码为6,加上127为133,则表示为10000101,而对于尾数将整数部分1去掉,为1111011,在其后面补0使其位数达到23位,则为11110110000000000000000

综上:则其二进制表示形式为:0 10000101 11110110000000000000000

则在内存中存放方式为(x86情况):

00000000 低地址
00000000
11111011
01000010 高地址

转载于:https://www.cnblogs.com/zhangjing327/p/3496912.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值