首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >#C语言 深度剖析整型在数据中的存储

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

作者头像
小皮侠
发布2024-04-08 20:34:44
发布2024-04-08 20:34:44
25600
代码可运行
举报
运行总次数:0
代码可运行

整形即有符号(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.大小端介绍:

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
复制
int main() {
    int* a=1;
    char* p = &a;
    if (*p == 1) {
        printf("小端");
    }
    else {
        printf("大端");
    }

}

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档