整数和浮点数在内存中的存储



前言

本篇用来记录学习过程,以及分享知识(
浮点数存储的话有可能不是很全,因为没有全学到(((抱歉!
初学C语言,如有错误,请多指正!


一、整数在内存中的存储

整型数据存放内存中存放的是补码

正数的原、反、补码都相同!

负数的原、反、补码如下:


整数中的权重

从右到左,从低到高,依次是,20、21、22、23、24、25……(1,2,4,8,16……)

二进制数中1为真,0为假,哪一位为真,就加上哪一位对应的权值,他们的和就是这二进制数的十进制数(有点绕感觉

例:6的二进制补码:

0000000000000110
0+0+0+0=00+0+0+0=00+0+0+0=00+4+2+0=6

原码

直接将数值按照正负数的形式翻译成⼆进制得到的就是原码
数字第一位是符号位,1表示负数,0表示正数

例:6的原码是:
0000 0000 0000 0110

例:-6的原码是:
1000 0000 0000 0110


反码

除了第一位符号位不变,其他取反

例:6的反码是:
0000 0000 0000 0110

例:-6的反码是:
1111 1111 1111 1001


补码

在反码的基础上+1

例:6的补码是:
0000 0000 0000 0110

例:-6的补码是:
1111 1111 1111 1010


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

常见浮点数:

圆周率(Π):3.14159……
科学记数法:1E10(1.0*1010

浮点类型:

float、double、long double

根据国际标准IEEE二进制浮点数算术标准(ANSI/IEEE Std 754-1985)
任意⼀个⼆进制浮点数V可以表⽰成下⾯的形式:

V = (−1)S ∗ M ∗ 2E

(-1)S表⽰符号位,当S=0,V为正数;当S=1,V为负数

2E表⽰指数位,是一个无符号整数

如果E是8位(float),他的取值范围为0~255
如果E是11位(double),它的取值范围为0~2047
IEEE 745中规定,由于科学计数法有可能出现负数,所以存入内存时E的值必须加上一个中间值
8位中间值是255/2 = 127
11位是2047/2 = 1023

M 表⽰有效数字(1<=M<2)

也就是说,整数位只能是1,所以可以在保存数据时候,舍弃掉整数位的1,这样就可以多给M的小数位多留出1位,浮点精度更高

例:
进制浮点数6.5转成二进制就是:
110.1

转成科学记数法就是:
1.101*2^2

V = (-1)0 * 1.101 * 22
S = 0
E = 2
M = 1.101

浮点型数据存放内存中:

01000000110100000000000000000000
S(8位)E+127M(舍弃整数位的1)

请添加图片描述

浮点数中的权重

浮点数中整数位和上面写到的一样,不同的在于小数点后面
从小数点后第一位从左往右依次是2-1、2-2、2-3、2-4、2-5……(0.5、0.25、0.125、0.0625……)


总结

额。。。本篇简单讲了下整数和浮点数的存储方式,以及其他小知识,写的不是很全,请谅解(
如果对大家有帮助就最好啦(


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值