C语言:char与unsigned char类型数据的范围

一、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;
}

你可能感兴趣的:(c语言,c++,开发语言)