【C语言学习笔记】数据存储

文章介绍了计算机中无符号数的原码、反码、补码在正数情况下的一致性,以及如何通过判断字节序来确定机器是大端还是小端存储。同时,详细讲解了整型、字符型数据的存储方式,特别是浮点数按照IEEE754标准的表示方法,包括单精度和双精度格式,以及指数的处理规则。
摘要由CSDN通过智能技术生成

tip:无符号数的原码、反码、补码相同

机器的字节序

以00000001为例:(低 ------> 高)
大端存储:00 00 00 01
小端存储:01 00 00 00
在这里插入图片描述
设计程序判断当前机器的字节序:

int a = 1;
char* p = (char*) &a;
if(*p == 1)
    printf("小端\n");
else
    printf("大端\n");

整型数据

二进制32bit位存储,分为原码、反码、补码,计算机内存中存储的为补码
(正数的原码、反码、补码相同;负数的符号位为1,正数为0)
范围为:[-(2^31-1) , 2^31]

字符型数据

二进制8bit位存储
范围为:[-(2^7-1) , 2^7]

浮点型数据

国际标准IEEE754

任意一个二进制浮点数可以表示成下面的形式:
(-1)^S * M * 2^E
S:符号位
M:有效数字,[1 , 2)
E:指数位
例:
浮点数5.5——十进制
二进制101.1—>1.011 * 2^2 —> (-1)^0 * 1.011 * 2^2
S=0; M=1.011; E=2

单精度:对于32位的浮点数,最高1位是符号位S,接着8位是指数E,剩下23位为有效数字M
在这里插入图片描述
双精度:对于64位的浮点数,最高1位是符号位S,接着11位是指数E,剩下52位为有效数字M
在这里插入图片描述
存储细节:
M:存储1.xxxxx小数点后的数字,如1.01存入01,后面补0
E:
float:原数+127
double:原数+1023

例:
float 5.5
S = 0; M = 011; E = 2+127 = 129
存入二进制:0 10000001 01100000000000000000000

E从内存取出

  1. E不全为0,1
    正常取出,E-127或E-1023,将有效数字M前加上第一位的1
  2. E全为0
    E=1-127或1-1023为真实值,有效数字M不再加上第一位的1,而是还原为0.xxxxx的小数,为了表示为±0,或接近0的很小的数字
  3. E全为1
    此时有效数字M全为0,表示为±无穷(正负号取决于符号位S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值