c语言 char / short / int中能存储多大的数据?

我们都知道char能存储的数据范围是-128 ~ 127,unsigned chard 范围是0 ~ 255。short能存储的数据范围是-32768 ~ 32767,unsigned short 范围是0 ~ 65535。int能存储的数据范围是-2147483648 ~ 2147483647,unsigned int的范围是0 ~ 4294967295。但为什么是这样的范围,我们从没有深究过,这篇博文将对此进行深入的讲解,希望能加深你对这些类型范围的了解。

1. char类型讲解

1.1 有符号char

char的大小为一个字节,八个比特位,我们就从0开始,那char的二进制补码先是
00000000 接着是
00000001

01000000

01111111
这时的char是255,再加1结果是
10000000 - 这个数是负数,首先它是不能计算的,我们不用转换它成原码,计算机直接把它解析成-128
10000001 - 这个数转换成原码是11111111,十进制是-127
10000010 - -126

11111111 - 原码是-1,再加1得到的就是0了。综上我们可以用一个圆来表示char能存储的数值

不理解没关系,我画个图来说明char从0开始不断地加1这个过程

在这里插入图片描述

在这里插入图片描述

这里我们可以得出结论,char从0开始不断地加1,会陷入循环,
从0 … 127,-128,-127…-2,-1,0 … 127,-128,-127…就像上面的圆一样

因此得到结论signed char中能存储的数据范围是-128 ~ 127,我们可以通过limits.h文件验证我们的说法在这里插入图片描述


来看一个程序


int main()
{
	char a[1000];
	int i = 0;
	for (i = 0; i < 1000; i++)
	{
		a[i] = -1 - i;
	}
	printf("%d",strlen(a));
	return 0;
}

这是上篇博客中提到的一题,现在对这题是不是有更深的理解了?

字符数组a从-1到-128,再减1得到127,127到1,最后到0。字符串遇到\0(\0的ASCII码值是0)停止,所以字符串长度是-1 ~ -128,1 ~ 127,之间的数字个数,求出的长度就是255。

在这里插入图片描述

1.2 无符号char

在这里插入图片描述
在这里插入图片描述

对最后的11111111加1得到0,又循环回去了。

所以我们得出结论:unsigned char能存储的数据范围是0 ~ 255。在limits.h文件中验证
在这里插入图片描述
在这里插入图片描述
两个f就是255,也是二进制的8个1。


再来看一道题


int main()
{
	unsigned char i = 0;

	for (i = 0; i <= 255; i++)
	{
		printf("hello world\n");
	}
	return 0;
}

同样也是上篇博客中提到的题目,正是因为对unsigned char不断地加1会陷入0~255再到0 ~ 255这样的循环,使得i总是满足i <= 255这个条件,所以hello world会不断地在屏幕上输出。

2.short类型讲解

2.1 有符号short

在这里插入图片描述
对short的0不断加1,这个过程和char一样,只是因为short有16个bit位,所以short最大的数是01111111 11111111,转换成十进制是32767,再加1是10000000 00000000,计算机直接把它解析成-32768…

后续的过程和char一样,我就不再赘述。由此我们得出结论,signed short能存储的数据范围是-32768 ~ 32767。

在limits.h文件中,定义short的范围如下
在这里插入图片描述

2.2 无符号short

在这里插入图片描述

由于是无符号数,不用单独解析最高位的符号位,直接把二进制序列转换成十进制,当16位bit都是1时,十进制就是在这里插入图片描述
所以unsigned char能存储的数据范围是0 ~ 65535,在limits.h文件中是十六进制的f f f f,根据上图的HEX一行,也能验证我们的说法是对的。
在这里插入图片描述

3. int类型讲解

3.1 有符号int

在这里插入图片描述

最大值是2^31 - 1,最小值是- 2 ^ 31。在limits.h文件中验证一下。在这里插入图片描述

3.2 无符号int

在这里插入图片描述
最大值是2^32 - 1,二进制的32个1,在这里插入图片描述
在limits.h文件中验证在这里插入图片描述
8个f,从计算机的HEX中看出,我们的说法是正确的。


好了,相信你对char,short,int三中基本类型存储范围的了解已经很透彻了,希望这篇博客能对你有帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值