char, unsigned char 在c/c++中的不同

    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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值