char r = -10, *pchar;
unsigned char s=-10, rr[10]={1,1,1,1,1,};
int ir = r;
int is= s;
pchar=&rr;
printf("%d,%d\n", ir, is, );
同样的代码,:
在c中unsigned char s=-10 是正确的, 但c++ 会报:warning: converting of negative value `-0x00000000a' to `unsigned char'
在c中pchar=&rr只报错,但C++中报错:cannot convert `unsigned char (*)[10]' to `char*' in assignment
char与unsigned char两者是有很大区别的,使用者很容易被两者相同的1字节二进制宽度所迷惑,以为它们是一回事,事实上两者用途完全不一样。
signed char和unsigned char是用于数值的,两者用于1字节的整数类型数值表示,而char并非用于数值表示,而是用于字符的,这就是为什么虽然有signed char和unsigned char却仍然存在char的原因。
char是实现相关的,底层类型可以是signed char和unsigned char中的一种,不过,无论哪种底层类型,都必须保证执行字符集中的字符码值必须是正的,码值的范围随1字节的位数而定,绝大多数情况的8位字节下是0到127,超出此范围的属于扩展字符集,C/C++标准不保证符号为正。
因此,如果你希望使用1字节的整数类型,不要使用char,应使用signed char或者unsigned char