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

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

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

  • 相关阅读:
    Missing Number
    python乱码,讲得比较好,
    公司搬家,拿了个费机器,没root密码,又忘了怎么搞了,
    mylyn
    eclipse shortcut binding
    jdk8 eclipse luna market crashed
    openjdk
    download plugin update site for offline installation
    armstrong's programming erlang 2nd
    sdf SimpleDateFormat 不是线程安全的,
  • 原文地址:https://www.cnblogs.com/craigtao/p/6412292.html
Copyright © 2011-2022 走看看