c语言数据的存储篇

本文详细探讨了C语言中的数据类型,包括整形家族、构造类型、指针类型和空类型。同时,解释了数据的原码、反码和补码表示,以及大端和小端字节存储的原理和判断方法。此外,还阐述了无符号数和有符号数的区别,并通过实例分析了它们在计算机中的表示和转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8313b9e718c8478988ed057433f3aa05.png


 

 

一:数据类型

5a0ccc0d40da4a6e8a8c70a1985368f9.png
类型的意义:决定了这个数据的使用范围。

1.1整形家族:

3b20e01d91ad4bb39d518a27f1a0c1f5.png

1.2构造类型:

b8a52da5142f45d79c12f4d93582102a.png

1.3指针类型:

113528819b7444da92d0fa4837ead9e2.png

1.4空类型:

2af9795e0e2a42a399dd9793122e2ad3.png

二:数据的原码反码补码

35295cffdcc640b99ee33b75e8138abf.png
为什么如此?是因为计算机中只有加法器,比如在做相减的时候,1-1需要变为1+(-1),这也就用到了补码。
38a425bdfd7a4dde81c8acf404583128.png

这段代码为何如此?按照常理20转化为十六进制是0X00 00 00 14,而在内存中却是倒过来存储。这便涉及到了计算机中的大端字节存储和小端字节存储。

2.1大端字节存储

ba4e15a5be504221b2c695ff28f097dc.png
请一定要注意这里是字节存储。对于16进制的20,我们转换如图所示
d2fa61cf2c4e4ee8bc8311c68e804461.png

通俗来讲,就是从左到右存储16进制的(2个16进制对应8个二进制=1个字节)

2.2小端字节存储

978f07a2946e47e39b0e0f7ba28dcc8b.png

d7f9623bfca04ffebcd6588ebb7f3416.png

2.3大小端字节存储的意义

f9c23a0e7c0e41f097f2c6e8ee121ee0.png
0819486f83704a6789ea1413404808d5.png

2.4判断大端小端

57c1a19a75084d9fb3e8a6e81be8a222.png
这里用强制类型转换,读取1个字节,如果返回值为1,则为小端,如果返回值为0,则为大端。

三:无符号数和有符号数

9d5d072b585145caaed16bb8ceda1849.png

1:第一步写出-1的原码反码补码
10000000 00000000 00000000 00000001 原码
111111111 111111111 111111111 111111110 取反(符号位不变)
111111111 111111111 111111111 111111111 补码

因为a是char类型,截断8个bit位
11111111
此时发生整形提升(最高位为符号位,补符号位,到32位)
11111111 11111111 11111111 11111111 补码
显然是-1

2:因为第一个char类型就是signed ,有符号数,所以b打印也是-1 3:打印无符号整形 -1截断8位后是11111111 整形提升的时候默认最高位不是符号位, 所以整形提升变成 00000000 00000000 00000000 11111111 也就是这是个无符号数,原码反码补码一样,所以直接计算得出来是255,因此char类型的-1的无符号整数就是255。

本人博客链接

感谢各位的浏览,谢谢!希望能帮助您更好的了解c语言中,数据存储的相关知识点

 

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不熬夜不抽烟不喝酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值