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

  • 相关阅读:
    Jenkins理解逻辑图
    什么是Jenkins?
    SpringBoot Test及注解详解
    如何熟悉一个新项目
    调用百度OCR模块进行文字识别
    python安装包的方法&安装遇到的问题总结_2020_11_19
    怎么让谷歌浏览器记住密码(不需要任何插件)
    excel以一列数据为x一列为y作折线图
    java创建新java文件的方法
    Mathematics释放变量的方法
  • 原文地址:https://www.cnblogs.com/bestheart/p/4167852.html
Copyright © 2011-2022 走看看