欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > char 的整数存储解释

char 的整数存储解释

2025/9/15 23:09:08 来源:https://blog.csdn.net/2301_80349538/article/details/142030088  浏览:    关键词:char 的整数存储解释

c3daa479c3bf48ad88dc28d5ff748f7d.png

目录

1.原因讲解

1.有符号类型的char

2.无符号类型的char(0-255)

 练习题1.

 练习题2.

练习题3.


小心!VS2022不可直接接触,否则!没这个必要,方源面色淡然一把抓住!顷刻炼化! 


1.原因讲解

1.有符号类型的char

我们知道char类型只有一个字节,一个字节是8bit位

在计算机中,计算机只会识别二进制,并以补码的形式存储在内存中

8bit位的二进制补码可以列举出很多种情况,如图:

5637baa92b3947aea0c86d82166cc5a8.jpeg

8bit位的有符号二进制只能列举出这么多情况,从0开始,二进制不断地加1,最终完成一个闭环,127的补码加1后为-128,-1的补码加1后又回到0,如此循环,所以char类型是127—— -128


2.无符号类型的char(0-255)

无符号类型的char是0-255,是因为无符号类型中,每一位都算有效位,没有符号位的存在,所以补码的每一位都算有效位,如图:

1ed465500f6549fca4097bcfc686f095.jpeg

因此,无符号类型的char的范围是0-255,从0不断地加1,最终加到255

补码达到255时,再加1就会回到0,实现闭环循环


 练习题1.

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<string.h>
int main()
{	char a[1000];int i;for (int i = 0; i < 1000; i++) {a[i] = -1 - i;}printf("%d", strlen(a));
}	

 许多人会认为,a[i]会储存-1到-1000,但真的如此吗?

如果是这样想的话,那就出错误了

因为整数在有符号中储存只能存储127到-128的整数,那存储的是什么,打印的又是什么呢?

代码分析及结果:

详细讲解如下图:

1ec25fbf4cda435ba772767412e3dd7d.png


 练习题2.

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<string.h>
int main()
{unsigned char i = 0;for (i = 0; i <= 255; i++) {printf("hello world\n");}
}	

  这次打印出来的结果是什么呢?难道是打印256次 "hello world" 吗?

恭喜你又错了,正确答案是死循环打印 "hello world"

详解如下图:

545d5f7e5ad4451091ae3550dc30acdb.png


练习题3.

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<string.h>
int main()
{unsigned int i;for (i = 9; i >= 0; i--) {printf("%u\n", i);}
}	

  详细讲解如下图:

2a29e47eb72e4183a6579d604fc7a046.png

8fdd48caf53e46a897fd8a5554dbb454.png

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词