ANSI C规定,当执行算术运算的时候,如果操作数类型不同,就会自动转换。
下面的例子中,if语句在signed int和unsigned int之间测试,a被升级为unsigned int类型,-1转换成无符号数是一个非常大的正整数。
要修正这个问题,只要对b进行强制类型转换
对无符号类型的建议
尽量不要在代码中使用无符号类型,以免增加不必要的复杂性。尤其是不要因为要表示的数不存在负数(例如年龄 个数等)而使用它。
尽量使用int那样的有符号类型。
只有在使用位段和二进制掩码时才可以使用无符号数。
在表达式中尽量使用强制类型转换,避免编译器自动选择。