zoukankan      html  css  js  c++  java
  • 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 类型的时候,要注意这些问题,

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

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

  • 相关阅读:
    Bzoj1305 [CQOI2009]dance跳舞
    Bzoj1269 [AHOI2006]文本编辑器editor
    Bzoj2957 楼房重建
    POJ1704 Georgia and Bob
    UVa11427 Expect the Expected
    POJ2096 Collecting Bugs
    Bzoj3041 水叮当的舞步
    Bzoj3894 文理分科
    Bzoj1426 收集邮票
    Bzoj1076 [SCOI2008]奖励关
  • 原文地址:https://www.cnblogs.com/craigtao/p/6412292.html
Copyright © 2011-2022 走看看