目录
小心!VS2022不可直接接触,否则!没这个必要,方源面色淡然一把抓住!顷刻炼化!
1.原因讲解
1.有符号类型的char
我们知道char类型只有一个字节,一个字节是8bit位
在计算机中,计算机只会识别二进制,并以补码的形式存储在内存中
8bit位的二进制补码可以列举出很多种情况,如图:
8bit位的有符号二进制只能列举出这么多情况,从0开始,二进制不断地加1,最终完成一个闭环,127的补码加1后为-128,-1的补码加1后又回到0,如此循环,所以char类型是127—— -128
2.无符号类型的char(0-255)
无符号类型的char是0-255,是因为无符号类型中,每一位都算有效位,没有符号位的存在,所以补码的每一位都算有效位,如图:
因此,无符号类型的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的整数,那存储的是什么,打印的又是什么呢?
代码分析及结果:
详细讲解如下图:
练习题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"
详解如下图:
练习题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);
}
}
标签:练习题,存储,符号,补码,整数,char,include,255 From: https://blog.csdn.net/2301_80349538/article/details/142030088详细讲解如下图: