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

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

 

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM