unsigned int 无符号整型的使用
有符号(int)和无符号(unsigned int)
unsigned int plus_a = 12; unsigned int plus_b = 13; int result_c = plus_a - plus_b > 0 ? plus_a - plus_b : 0;
上面得到的结果: -1
不应该是0的吗? 调试可以发现 plus_a - plus_b 得到的结果是一个很大的整数(因为是unsigned int 类型,最高位的正负标志位也被当成数据本身,
并非是int 类型的时候的正负标志了),所以表达式中的条件是成立的,那最终结果应该是最大的那个数啊(因为是plus_a - plus_b),
我猜测是运算结果赋给了 int 类型,
再来验证一下
unsigned int plus_a = 12; unsigned int plus_b = 13; unsigned int result_c = plus_a - plus_b > 0 ? plus_a - plus_b : 0;
上面的结果是:4294967295
再看下面一段代码
unsigned int plus_a = 12; unsigned int plus_b = 13; int result_c = (int)(plus_a - plus_b) > 0 ? plus_a - plus_b : 0;
结果是:0
应该是两个 unsigned int 类型运算结果就是 unsigned int类型
所以在使用unsigned int 类型的时候,要注意这些问题,
我得回去重新读《深入理解计算机系统》相关章节了,竟然都不敢肯定的分析这个现象了
记录一下,希望对技术同仁们有些帮助,