整数以及浮点数在内存中的存储

整数以及浮点数在内存中的存储

整形数据类型:
(unsigned:无符号型,signed:有符号型)

  1. char(字符型 1字节)
  2.   unsigned char
    
  3. 	 signed char
    
  4. short(短整型 2个字节)
  5. 	 unsigned short [int]
    
  6.   signed      short[int]
    
  7. int(整形 四个字节)
  8. unsigned int
    
  9. signed     int
    
  10. long(长整型 8个字节)
  11.   unsigned long [int]
    
  12.   signed     long[int]
    

一个变量在内存中存储需要开辟对应的空间,而类型不同开辟的空间大小也不同,接下来以整形举例子来描述一下整形数据是如何在内存中存储的。
原码,反码, 补码
计算机中整数的表现形式有三种,原码,补码,反码。
当整形类型为无符号数时这三个码的二进制数据一样。
当整型类型为有符号数时,三种表示方法由符号位数值位两部分组成,符号位用"0"表示正用"1"表示负,而负数三种表示方法各不一样。
原码
直接正负数按照二进制的形式展开就行
反码
将原码的符号位不变(最高位为符号位),其他位按位取反就可以得到。
补码
将反码得到的二进制序列进行加一操作可以得到。
在计算机中数值都是用补码来表示的,好处在于这样可以同时处理数值位和符号位,同时由于cpu只有加法器,这样就可以有效处理运算问题。
a和b存储的都是补码
但在内存中看到存储时字节的存储方式有规律,这又是另外一个问题大小端存储
大小端
这是人们规定的一种模式,在存储数据时都是以字节为单位存储的,当我们把高字节放在高地址,低字节放在低地址,这就称为小端存储,当我们把高字节放在低地址,把低字节放在高地址,这样称为大端存储。处理器不同存储方式也会不同,这两种存储方式也可能在同一个系统中出现,谁更好,并没有一个准确的定论。
浮点数据类型
13. float(单精度浮点型 4字节)
14. double(双精度浮点型 8字节)
浮点型的存储
根据国际标准IEEE(电气和电子工程学会) 754 一个二进制浮点数a可以表示成以下形式:
15. (-1)^S * M * 2^E
16. (-1)^S表示符号位,当S=0,a为正数;当S=1,a为负数。
17. M表示有效数字,大于等于1,小于2。
18. 2^E表示指数位。
十进制的5.0,写成二进制是101.0,相当于1.012^2.由上面格式得出S=0,M=1.01,E=2。
十进制的-5.0,写成二进制是-101.0,相当于-1.012^2.由上面格式得出S=1,M=1.01,E=2。
IEEE 754规定
对于32位浮点数,最高位是符号位S,接着的8位是指数E,剩下的23位为有效数字M。
在这里插入图片描述
对于64位的浮点数,最高位是符号位,接着的11位是指数E,剩下的52位为有效数字M。
E为无符号整数(unsigned int)
19. E不全为0或不全为1
这时,浮点数就采用下面的规则表示,指数E减去127(或1023),得到真实值 ,再将有效数字M前加上第一位的1。
比如0.5(1/2) 的二进制形式为0.1,由于规定正数部分必须为1,所以将小数点右移一位,则为1.0*2^(-1),其阶码为-1=127 = 126,表示为01111110,而尾数1.0去掉整数部分为0,补齐0到23位00000000000000000000000则二进制表示为0 01111110 00000000000000000000000

  1. E全为0
    这时E等于1-127(1-1023)为真实值
    有效数字M不再加上第一位的1,而是还原为0.######的小数,这样是为了表示+0或-0,以及接近0很小的数字

  2. E全为1

  3. 这时有效数字M全为0,表示±无穷大。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值