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

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

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

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

if (int(-2147483648) > 0)std::cout << "true";
elsestd::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#

转载于:https://www.cnblogs.com/jacklu/p/4528069.html

【译】为什么这样宏定义#define INT_MIN (-2147483647 - 1)?相关推荐

  1. [C++]宏定义#define A B C

    C++关于宏定义的用法,有形如#define A B C的格式,此时B和C都是已知的字符串常量. 在宏定义中. 可以把两个常量字符串连在一起 如果#define A "a" 那么宏 ...

  2. 宏定义Define的一些用法

    ---转载百度文库 一. #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处 ...

  3. VS无法使用宏定义#define解决方案

    在使用VS编译C语言或者其他语音用到宏定义#define,VS会报错提示(以VS2019为例) 解决方式: 在工具-->选项-->文本编辑器-->C/C++-->查看中,将&q ...

  4. [C语言]宏定义#define的使用详解

    一.宏定义定义常量 预定义符号 FILE //进行编译的源文件 LINE //文件当前的行号 DATE //文件被编译的日期 TIME //文件被编译的时间 STDC //如果编译器遵循ANSI C, ...

  5. C语言 | 预处理 | 宏定义 | #define | 定义函数

    文章目录 预处理 预处理运算符 宏定义 无参宏定义 带参宏定义 宏定义-定义函数 此文主要介绍宏定义,并在介绍宏定义时举例介绍预处理命令 预处理 参考:C 预处理器 | 菜鸟教程 重要的预处理器指令如 ...

  6. 预处理命令 宏定义 #define #undef

    预处理命令 源程序中以#开头的行称为预处理指令. 预处理指令并不是C语言的语法成分,而是传给编译程序的指令. 包括: 宏定义 #define #undef 文件包含 #include 条件编译 #if ...

  7. 宏定义#define整理

    一.宏定义#define 优点:一方面可以节省程序的空间上的篇幅,另外,恰当地使用宏定义可提高程序的时间效率.代码可以写的通俗易懂.可以提高程序的清晰性.可读性,使于修改移植等. 缺点:宏定义的使用实 ...

  8. 枚举(enum)、宏定义(#define)、结构体(struct)的拾遗

    1.宏定义 1.1.不带参数的宏定义 #define 标识符 字符串           例如:#define PI 3.1415926 说明: (1)宏名一般习惯用大写字母表示,但并非规定,也可以用 ...

  9. C语言-宏定义#define的用法

    目录 1 不带参宏定义 2 带参宏定义 3 与字符串有关的用法 3.1 字符串转换 3.2 字符转换 3.3 字符连接 1 不带参宏定义 这种用法是最简单最常见的一种方式,如下: #define PA ...

最新文章

  1. TensorFlow基础3-机器学习基础知识(解析法实现一元线性回归、多元线性回归)
  2. Exchange Server 2010部署安装
  3. php udp 非阻塞,使用非阻塞udp读取时丢失消息
  4. 第十六课、Qt对象间的父子关系------------------狄泰软件学院
  5. 李宁-2015年7月13日-个人文档
  6. 服务器具有挂起的重新启动_ESP8266与网络服务器实时通讯
  7. hdu1005 Number Sequence(寻找循环节)
  8. excel筛选排序从小到大_excel筛选怎么用教程 重复数据多个条件筛选功能教学
  9. Windows 11正式发布!网友的这波吐槽,太搞笑了。。。
  10. JVM监控及诊断工具命令行篇之jstack
  11. mysql如何导出数据脚本_MySQL 导出数据
  12. 自定义Spring Boot项目启动Logo
  13. html设置为壁纸win10,Win10让桌面壁纸自动换的设置方法(图文教程)
  14. Epicor客制化 - RowRule使用示例
  15. 开源学校管理系统php,SchoolCMS学校管理系统 v2.3
  16. 大数据部门的作用与大数据工程师的工作
  17. lnmp分离网站基础架构
  18. linux中将文本中的单词换掉的指令_干货:Linux常用命令全称及讲解
  19. 20v转5v_12v转5v_5v转3.3v 5A用AH8316
  20. C语言程序设计:这里输入一个数,分别求其平方值、立方值和平方根。

热门文章

  1. Hadoop的安装(单机和集群)
  2. Spring Boot实践--CommandLineRunner接口
  3. Nginx动态路由的新姿势:使用Go取代lua
  4. 新口令范筹(Token Scope)- viewables:read
  5. 使用cookie解决微信不能存储localStorage的问题
  6. Spring控制器响应(action)请求的几种处理方式,如返回JSON,MODEL MODELVIEW,STRING
  7. fsck.ext3: Unable to resolve 'LABEL=/design'
  8. Debian读写ntfs分区格式!
  9. HTML和jQuery拆分成两个文件
  10. 结构体的嵌套 自身嵌套 相互嵌套