zoukankan      html  css  js  c++  java
  • (-2147483648 > 0)?

    -2147483648 是最小的整数(32位)。但是:

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

    打印出来的是"true"。你知道其中的原因吗?

      -2147483648 不是一个数(number)。C++语言不支持负数字面值常量(literal value).-2147483648 实际上是一个表达式:在整数字面值常量 2147483648 前面加上一个一元运算符 - 。
    2147483648 很显然已经超出了 int 的整数范围 (-2147483648,2147483647),如果 long int 能表达更大的范围,编译器将会自动假定 2147483648 为 long int 类型。(在C++11中被认定为 long long int 类型)。
      但是,VC上 long int 与 int 都是 32 位的,总之,若没有更大的整形在有些平台上,这意味着 2147483648 超过了所有有符号整形的范围,或者这么说,这种行为是未定义的(undefined)。
      实际上,考虑到上述行为的未定义性,2147483648 可能被解释成独立实现(implementation-dependent)的负数,这个负数通过符号(-)又转换成正数;另外,也有可能通过无符号类型来代表这个值(例如,在C89/90 编译器使用了 unsigned long int ,但是 C99 和 C++ 都不是这样的)。由于这是未定义的行为,所以编译器可以自己实现这种未定义的行为。

    补充说明:
    我们通常定义一个 INT_MIN 为:#define INT_MIN (-2147483647 - 1)
    而不是:#define INT_MIN -2147483648
    因为后一种行为可能出现与预期不一样的结果。

    原文出自:http://stackoverflow.com/questions/14695118/2147483648-0-returns-true-in-c

  • 相关阅读:
    ref:使用Dezender对zend加密后的php文件进行解密
    MongoDB-Replica Set Deployment Architecture
    MongoDB-Replication Replica Set Arbiter
    MongoDB-Replication Secondary Members
    MongoDB Replication
    MongoDB 备份方法
    scrapy 框架
    MongoDB 指定应用上下文数据模型
    MongoDB 树形模型
    MongoDB 文档模型关系
  • 原文地址:https://www.cnblogs.com/bestheart/p/4167852.html
Copyright © 2011-2022 走看看