|
发表于 2021-11-28 23:27:55
|
显示全部楼层
本帖最后由 jackz007 于 2021-11-28 23:48 编辑
左边的数据类型是 char ,右边是 unsigned char,同一个字节,在 0 ~ 127 的范围内,char 和 unsigned char 数值重合相等,出了这个范围,char 会进入 -128 ~ -1,而 unsigned char 则会相应进入 128 ~ 255。所以,同一个字节,按 char 和 按 unsigned char 解释,可能会得到完全不同的数值,在数值运算中的表现也会完全不同。本例的 A、B就属于 char 与 unsigned char 数值相等重合,而 C、D、E 则属于二者分道扬镳时的情形。
参考下面的代码也许可以加深理解:
- #include <stdio.h>
- int main(void)
- {
- char a = 13 , b = 122 , c = -1 , d = -14 , e = -128 ;
- printf("A. %d -> %u\n" , a , a & 0xff) ;
- printf("B. %d -> %u\n" , b , b & 0xff) ;
- printf("C. %d -> %u\n" , c , c & 0xff) ;
- printf("D. %d -> %u\n" , d , d & 0xff) ;
- printf("E. %d -> %u\n" , e , e & 0xff) ;
- }
复制代码
编译、运行实况:
- D:\00.Excise\C>g++ -o x x.c
- D:\00.Excise\C>x
- A. 13 -> 13
- B. 122 -> 122
- C. -1 -> 255
- D. -14 -> 242
- E. -128 -> 128
- D:\00.Excise\C>
复制代码 |
|