C语言数据存储

一、整形在内存中的存储

整形数字在内存中以二进制的的数据进行存储,整数有三种编码:原码、反码、补码

源码:十进制数据转为二进制,就为源码

反码:符号位不变,其他位取反就为整数的反码

补码:反码 + 1,就为补码

正整数,源码、反码、补码相同,负整数,原码、反码、补码需要计算得到

整形数据在内存中存储的是补码。

为什么计算机中一律采用补码进行存储?

使用补码,可以将符号位和数值域统一处理;CPU中只有加法计算,可以将加法和减法进行统一处理,补码与源码相互转换其运算过程是相同的(补码 = 源码取反 + 1,原码 = 补码取反 + 1),不需要额外的硬件电路。

1、大小端

小端字节序存储:把一个数字的高位字节序存放在高地址中的方式

大端字节序存储:把一个数字的高位字节序放在低地址中的方式

大小端存储方式取决于硬件,常见的x86是小端模式

整形提升:

1、正数整形提升补码高位补0

2、负数整形提升补码高位补1,符号位不变

int 类型转 char类型时,采用低位截断(截断截的是存储在内存中的补码的低位),与大小端没有关系

打印a,char 在内存中表示有符号char,取值范围:-128 ~ 127,所以-128可以保存在char中,-128在内存中的补码11111111 11111111 11111111 10000000,截断低8位10000000,因为打印的方式为u%,那么需要做整形提升,10000000为-128,整形提升得到内存中的数据:11111111

11111111 11111111 10000000(补码),但是要求是以无符号的整数打印,所以最高位1有权重,表示2的31次方,所以char a = -128已无符号整形的格式打印的结果为4294967168,结果非常大。

二、浮点型存储

char、int、uint、long、long long这些整形定义在limits.h的头文件中

float、double、long double这些浮点型定义在float.h的头文件中

从此图中看出,整形和浮点型在内存中存储的方式是不一样的。

1、浮点型数据存储规则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值