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 类型的时候,要注意这些问题,

我得回去重新读《深入理解计算机系统》相关章节了,竟然都不敢肯定的分析这个现象了

记录一下,希望对技术同仁们有些帮助,愿上帝赐福与你们!

原文地址:https://www.cnblogs.com/craigtao/p/6412292.html