#C语言 深度剖析整型在数据中的存储

文章深入介绍了整形数据(包括有符号和无符号)在内存中的存储方式,强调了原码、反码和补码的概念及其在加减运算中的作用。此外,还讨论了字符型(char)与ASCII码的关系以及大小端模式在计算机内存中的数据布局。通过代码示例检测了系统的大小端模式。
摘要由CSDN通过智能技术生成

整形即有符号(signed)和无符号(unsigned)定义的char,short,int,long型。

要深度理解整形在内存中的存储首先要弄清“三码”概念,也就是所谓的原码,反码和补码。

1.原码,反码,补码

三种类型是整数在内存中的二进制表示法,均有符号位和数值位两部分组成。

符号位:位于首位占一个位置,用0表示正,1表示负。

数值位:正数:数值位原,反,补相同。

               负数:原码   直接将数值按正负翻译为二进制位即可得到

                          反码   原码符号为不变,其他位按位取反即可。

                          补码   反码加一即可。

同时对于整形来说:数据存放内存中存放的是补码。

为什么计算机要这样定义原码,反码,补码的储存呢?

那是因为计算机要进行加减法运算需要一个统一的二进制格式,但是对原码不做处理的话,正数和负数相加即如下情况

00000000 00000000 0000000 00000001 (+1)

10000000 00000000 0000000 00000001 (-1)相加得

10000000 00000000 0000000 00000010 (-2)明显不符合正常情况,又为了避免分情况讨论(避免添加额外的硬件电路),计算机大佬们发明了原,反,补码。优点:使计算机对整形的加法减法可以统一处理。

2.了解完这个我们接着了解char,char作为字符型为什么被分类到整形呢?

因为char在内存中的存储是先转换为ASCLL表值在进行存储,因为char在内存中占一个字节,刚好对应ASCLL中256个元素。

有符号型和无符号型:char在C语言中没有明确的规定,(和编译器有关,VS中为无符号型char a=unsigned char a),其他类型都默认为有符号型。

3.大小端介绍:

大小端是一种存储模式,跟计算的硬件有关,不同的计算机存储模式可能不同。

大端模式:指数据的低位(个,十,百,千;低->高)存储在内存的高地址中,而数据的高位,存储在内存的低地址中。

小端模式:指数据的高位(个,十,百,千;低->高)存储在内存的高地址中,而数据的低位,存储在内存的低地址中。

下面给出代码检测电脑大小端模式:

int main() {
    int* a=1;
    char* p = &a;
    if (*p == 1) {
        printf("小端");
    }
    else {
        printf("大端");
    }

}

谢谢大家看到这里,对大家有帮助,以后我还会分享更多It学习中的小知识。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值