一、char类型数据的范围
数据在内存中以补码形式存储
char范围:-128~127
补码 原码 值(十进制)
00000000 00000000 0
00000001 00000001 1
00000010 00000010 2
00000011 00000011 3
…… …… ……
01111111 01111111 127
10000000 无法表示 -128
10000001 11111111 -127
10000010 11111110 -126
10000011 11111101 -125
…… …… ……
111111110 10000010 -2
11111111 10000001 -1
unsigned char范围:0~255
补码 原码 值(十进制)
00000000 00000000 0
00000001 00000001 1
00000010 00000010 2
00000011 00000011 3
…… …… ……
01111111 01111111 127
10000000 10000000 128
10000001 10000001 129
…… …… ……
11111111 11111111 255
二、例题详解
例1:代码如下
a[1000]数组中存放的是数据依次是:
-1 -2 -3 …… -128 127 126 …… 2 1 0 -1 -2 -3 …… -128 127 126 …… 2 1 0 ……
由于转义字符 ‘\0’ 的ASCII码值为0,strlen函数遇到 0 时会停止统计(不包括0)
因此第一个0前面一共有255个数,运行结果为255
int main() { char a[1000]; for (int i = 0; i < 1000; i++) { a[i] = -1 - i; } printf("%d\n", strlen(a)); return 0; }
例2:代码如下
unsigned char 的范围是 0~255,当 i=255 时,i++变为0,从0到255无限循环,因此程序运行结果为死循环
int main() { for (unsigned char i = 0; i <= 255; i++) { printf("hello world\n"); } return 0; }