C/C++的字符默认是有符号的,这一点非常的不爽,因为很少有人用单字节表达有符号数,毕竟,ASCII码是无符号的,对字符的绝大多数处理都是基于无符号的。
这一点在其它编程语言上就好很多,基本上都提供了byte这种类型专门表达无符号字节。
如果程序只是使用字符串,那么有符号无符号是无所谓的,但是一旦涉及到算数处理,一定要严格使用有符号和无符号。涉及到的处理包括大小比较、加减乘除、位运算、移位等。
处理网络协议、串口数据等基本上都是基于无符号的。
我遇到过很多次因为有符号无符号转换错误导致的BUG。
最坑的是,不同编译器默认的char是有符号还是无符号是不确定的,对于在不同系统上编写代码的人来说,这简直是个噩梦。
我刚刚解决了一个字符表格显示不正确的问题,原因就是这种系统上默认char是无符号的,导致我的一个用了很多年的代码中的判断字符小于0总是失败,从而导致计算字符串的实际显示宽度错误,强制转换为“signed char”之后问题便解决了。
所以,虽然大家都习惯了使用“char”,但是在进行计算的时候,最好强制指明signed或unsigend。
(这里是结束)