zoukankan      html  css  js  c++  java
  • 【译】为什么这样宏定义#define INT_MIN (-2147483647

    2的32次方为2147483648*2,0~(2147483648*2-1)这是32位机上无符号整数代表的范围。而32机的int范围为-2147483648~+2147483647

    stackoverflow.com上有人提出这样一个问题:

    if (-2147483648 > 0)
        std::cout << "true";
    else
        std::cout << "false";

    这将输出true,
    而下面的程序会输出false:

    if (int(-2147483648) > 0)
        std::cout << "true";
    else
        std::cout << "false";

    下面是对排名第一答案的翻译:

    -2147483648不是一个“数”。实际上,-2147483648是一个表达式:一个正整数2147483648和一个一维运算符“-”。对于32位机,2147483648明显已经超过了int的范围。如果long int有“更大的范围”,编译器会自动的假定2147483648为long int型。(C++11的编译器会假定为long long int型)。这样才会得到用户想要的“负的2147483648”

    然而很明显,如果long int和int一样,就不会存在“更大的范围”了。这样的话,2147483648溢出了,你的程序的行为是未定义的

    所以,通常我们这样定义

    #define INT_MIN (-2147483647 - 1)

    而不是,看似更直接的定义

    #define INT_MIN -2147483648

    后者可能造成意想不到的结果

    原文地址:http://stackoverflow.com/questions/14695118/2147483648-0-returns-true-in-c#

  • 相关阅读:
    探索javascript----事件对象下的各种X和Y
    css2----兼容----ie67的3像素bug
    探索javascript----拖拽
    一、Rabbitmq安装与配置信息
    四、RABBITMQ特点
    一,activemq安装和配置相关信息
    三,activemq持久化消息到mysql数据库中
    三、RABBITMQ的几个基本概念
    二、JMS和AMQP的对比
    hibernate的工作原理
  • 原文地址:https://www.cnblogs.com/jacklu/p/4528069.html
Copyright © 2011-2022 走看看