C语言 数据在内存中的存储详解

2025博客之星年度评选已开启 10w+人浏览 1.5k人参与


前言

这一章主要讲一下整数、浮点数在内存中的存储以及大小端字节序。
1步带你搞懂大小端


一、整数在内存中的存储

整数的2进制表示方法有三种:原码、反码、补码
原码:直接将正负数翻译成二进制就是原码
反码:原码取反
补码:反码加1
对于整形来说,数据在内存中的存储其实是补码。

二、大小端字节序和字节序判断

int a =0x11223344;
11是高位字节,44是低位字节
在内存中从左向右地址是由低到高。
小端存储:低位字节放在低地址处。a(小端)44332211
大端存储:低位字节放在高地址处。a(大端)11223344

浮点数在内存中的存储

浮点类型有:float、double、long double
根据国际标准IEEE(电⽓和电⼦⼯程协会) 754,任意⼀个⼆进制浮点数V可以表⽰成下⾯的形式:
V = (−1)S ∗ M ∗ 2E
•-(1)S 表⽰符号位,当S=0,V为正数;当S=1,V为负数
•M 表⽰有效数字,M是⼤于等于1,⼩于2的
• 2E 表⽰指数位
例:
十进制的5.0,写写成二进制是101.0,相当于1.01*22
S=0,M=1.01,E=2
float类型:
在这里插入图片描述
double类型:
在这里插入图片描述

浮点数存储中的M

前面说过1<=M<2,在存储时会把前面的1舍去,只存储后面的小数部分,读取时把1加上去,因为这样会省去一个位置

浮点数存储中的E

首先E是一个无符号整数(unsigned int )
因为科学计数法的E有负数,所以规定E的真实值必须再加上一个中间数
E为8位时(0~255)+127
E为16位时(0~2047)+1023

  1. E为全0时
    E=真实值加127 2-127无限接近于0
    0 00000000 00100000000000000000000

  2. E为全1时
    E=真实值加127
    0 11111111 00010000000000000000000
    真实值无限接近于正无穷

  3. E不为全0也不为全1(常规情况)


总结

如果有什么不懂的可以私信我或者评论区留言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值