C语言必备知识点2 —— 理解char类型取值范围定义(Essential knowledge points 2 of C language - understanding the definition of value range of char type)

 

char 分为 signed char (有符号char)和 unsigned char(无符号char),它们都是占一个字节 —— 8 bit 位。

8个二进制位存放二进制序列的话,共有 2^8 =256 种可能(可以用概率的知识点理解,每一个位置有2种可能,所以一共的可能数就是 2*2*2*2*2*2*2*2 = 2^8 )

我们知道,在C语言中 signed char 的范围是 -128 ~ 127, unsigned char 的范围是 0 ~ 255,那这个范围要怎么理解呢,以下将进行详细说明。

 

(1)signed char 理解图:

 

 

说明:

第一列列出了 8bit 在内存中的全部可能,从 00000000 ~ 11111111,因为在内存中的存放的是补码,所以我们就认为第一列是补码;

第二列列出了对应第一列补码计算得到的反码(正数反码和补码相同,负数补码 -1得到反码);

第三列列出了由第二列反码计算得到的原码(正数原码和补码相同,负数符号位不变,其他位按位取反);

第四列列出了由第三列原码计算得到的十进制数。

从以上图就可以得到:有符号 char 的范围是 -128~127

 

(2)unsigned char 理解图:

说明:

第一列列出了 8bit 在内存中的全部可能,从 00000000 ~ 11111111,因为在内存中的存放的是补码,所以我们就认为第一列是补码;

第二列,第三列分别列出了第一列值对应的反码和原码,因为是无符号数,所以原反补码相同;

第四列列出了由第三列原码计算得到的十进制数。

从以上图就可以得到:无符号 char 的范围是 0~255

 

(3)signed char 的圆轴表示图:

说明:

这个图的作用主要是方便我们就加减计算,表示当对二进制数从 00000000 加 1 加到 11111111,实际上对应的就是从十进制 0 ~ 127 ~ -128 ~ -127 ~ -126 ~ -3 ~ -2 ~ -1 的过程。

即当对 127+1 的时候,得到的就是 -128,对应内存中就是对补码 01111111 + 1 的时候,得到的就是 10000000

这个在之后的C语言整型在内存中的存储练习题中也会讲述到。

 

以上知识点来自:https://www.bilibili.com/video/BV1q54y1q79w?p=29

 
posted @ 2022-05-13 11:08  ttweixiao9999  阅读(443)  评论(0编辑  收藏  举报