定义: char是C/C++整型数据中比较古怪的一个,其它的如int/long/short等不指定signed/unsigned时都默认是signed,
转换: int/unsigned int变量赋值给 unsigned char变量是会发生字节截断(9位和高于9位的将被程序自动丢弃)
储存:unsigned char在计算机中使用补码存储,
char 型的值 [-128, 127]:
unsigned char 型的值 [0, 255]
--------------------------------
例子:
char a = 127;
char b = 128;
char c = 129;
char d = 255;
char e = 256;
char f = 257;
char g = -10;
printf("a = %d, b = %d, c = %d, d = %d, e = %d, f = %d\n", a, b, c, d, e, f);
printf("g = %d\n", g);
----------------------------
unsigned char w = 255;
unsigned char x = 256;
unsigned char y = 257;
unsigned char z = 258;
unsigned char zz = -10;
printf("w = %d, x = %d, y = %d, z = %d\n", w, x, y, z);
printf("zz = %d\n");
输出结果: w = 255, x = 0, y = 1, z = 2
zz = 246
但char在标准中是unsigned,编译器可以实现为带符号的,也可以实现为不带符号的。
转换: int/unsigned int变量赋值给 unsigned char变量是会发生字节截断(9位和高于9位的将被程序自动丢弃)
如:unsigned int a = 0xFFFFFFF7;
unsigned char b = (unsigned char)a;
此时b的值为 0xF7;
储存:unsigned char在计算机中使用补码存储,
例如:unsigned char a = 0xF7;
a在计算机中存储的方式为:10001001
char 型的值 [-128, 127]:
unsigned char 型的值 [0, 255]
--------------------------------
例子:
char a = 127;
char b = 128;
char c = 129;
char d = 255;
char e = 256;
char f = 257;
char g = -10;
printf("a = %d, b = %d, c = %d, d = %d, e = %d, f = %d\n", a, b, c, d, e, f);
printf("g = %d\n", g);
输出结果: a = 127, b = -128, c = -127, d = -1, e = 0, f = 1
g = -10
----------------------------
unsigned char w = 255;
unsigned char x = 256;
unsigned char y = 257;
unsigned char z = 258;
unsigned char zz = -10;
printf("w = %d, x = %d, y = %d, z = %d\n", w, x, y, z);
printf("zz = %d\n");
输出结果: w = 255, x = 0, y = 1, z = 2
zz = 246