有关整型数据类型的基本概念梳理

我们都知道C语言中拥有非常丰富的整型数据类型,如字符型 char,短整型 short,整型 int…。它们每个所能表示的整数大小是不一样的,而其中也有一些复杂的转换关系,那么今天这篇博客就来梳理一下C语言中的五种整型数据类型。
首先要知道

计算机是通过晶体管的开关状态来记录数据的。它们通常8个编为一组,我们称之为字节。而晶体管有开关两种状态,一个字节有8个晶体管,因此一个字节可以拥有2的八次方个不同的状态。让每一种状态对应一个数值,这样一个字节可以表示256个不同数值。而在发明C语言的年代,计算机存储资源是非常珍贵而稀缺的。对一个字节就足够存储的情况,何必用两个字节来存储呢?

由此这就是多种整型数据类型的由来。

具体的每种类型的大小我们可以通过 sizeof 这个关键词来测量,代码如下:

#include <stdio.h>
int main()
{
printf("%zu",sizeof(char));
printf("%zu",sizeof(short));
printf("%zu",sizeof(int));
printf("%zu",sizeof(long));
printf("%zu",sizeof(long long));
return 0;
}

因为我们并不知道sizeof所返回的结果是什么,所以我们使用了 %zu 这个占位符。我将上述代码在Visual Studio 2022 中运行得到结果分别为1,2,4,4,8个字节。
其中 intlong 都占用4个字节让我很疑惑,经搜索为什么 longint 大小相等这样是可以的,C语言标准规定高级别的类型取值范围不得小于低级别的类型,但是它们可以是一致的。

至此我们清楚了五种C语言规定的整型数据类型及其所占字节大小,那么它们所能表示的大小范围用人话来描述究竟是什么样的呢?

前面我们提到每个字节由8个晶体管组成,每个晶体管状态我们称之为位。那么char,short,int,long,long long分别占用了8,16,32,32,64位。
经过推演学习资料显示,如果不考虑负数,那么整型数据类型可以表达的数据范围是:***假设,位数为n,则数据范围从【0】开始,到【2的n次方-1】的数值范围。***而为什么有一个“-1”?那是因为我们不能在实际情况中忽略附属的存在,所以我们需要拿出一个位来作为符号位,用来表示这个数据是正数还是负数。
于是我们发现次方数比位数少一,是因为最高位被用去做符号位了。
那么一定要有这么一个少一存在吗?其实并不然。如果我们确定我们不会用到负数,那么可以使用 unsigned 关键词,这样表明这个数据类型,是不带有符号位的。既然不带有符号位了,那么原本留给符号位的那一个二进制位,就可以用来表示数值。

这就是我对整型数据类型基本概念的一些浅薄理解,而关于二进制表示法,数值的补码表示法等内容我目前还不能很好的明白,还有待继续学习!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值