【C++】为什么INT_MIN不是直接写成-2147483648(转载)
最近在编程中遇到一个问题:
#include <iostream> using namespace std; int main()
{
int n = -2147483648;
//cout << (1 > -2147483648) << endl; return 0;
}
使用VS2012编译提示:error C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型
使用g++编译提示:
test.c:7:2: warning: this decimal constant is unsigned only in ISO C90 [enabled
by default]
在网上搜索,发现VS之前的版本提示的是warning,而到了VS2012版本就直接提示为error,加强了严重性。
实际上,当程序员尝试表达最小整数值 -2147483648 时,会发生此问题。 该值不能写为 -2147483648,因为表达式处理分两个步骤:
1. 计算数字 2147483648。 因 2147483648 大于最大整数值 2147483647,所以其类型不是 int,而是 unsigned int。
2. 将一元负应用于该值,得到无符号结果,该结果碰巧是 2147483648。
而这种隐含转换的无符号类型的结果可能导致意外行为,所以编译器会提示waring甚至在VS2012中直接提示error。
关于导致的意外行为,参看上述代码注释行: cout << (1 > -2147483648) << endl;
因为-2147483648会被转换为unsigned即2147483648,同时在比较中1也会被提升为unsigned,从而得到结果0,而这行代码我原意是比较两个int数,结果预计为1。
如何避免出现编译器提示waring甚至是error?
1. 使用limits.h中宏定义的INT_MIN。那为什么使用了该宏定义就不提示了呢?具体看其定义:
#define INT_MIN (-2147483647 - 1) /* minimum (signed) int value */
不是直接给出-2147483648的常量来避免;
2. 根据上述提示,因而给int变量赋最小int值时,也可以使用 n = -2147483647 - 1 或者你想特立独行的搞个 n = -2147483646 - 2,只要不直接出现-2147483648就不会出现unsiged的转换。
【C++】为什么INT_MIN不是直接写成-2147483648(转载)的更多相关文章
- CSS Icon 项目地址 小图标-用css写成的
http://cssicon.space/#/icon/focus 这是所有用css写成的 小图标 右侧有 html和css代码
- HTML 5 背离贪吃蛇 写成了类似于屏幕校准
中间写了改 改了写 还是没做出自己满意的效果 ,看来自己的确不是一个走前端的料子.当然h5还是学一点好一点 具体说来 就是 在canvas 的画布中 鼠标点击后画上一个圆形 然后就有随机的在画布上面出 ...
- ASP.NET的一次奇遇:UserControl写成Control引发的w3wp进程崩溃
昨天在写代码中一不小心将UserControl写成了Control,将原来应该继承自System.Web.UI.UserControl的用户控件,比如下面的BlogStats: <%@ Cont ...
- Excel日期格式单元格写成yyyy.MM.dd格式将无法读取到DataTable
最近在改公司的订单系统,遇到了一个奇怪的问题.C#程序需要从Excel文件中将数据全部读取到DataTable,其中Excel文件的第一列是日期格式yyyy/MM/dd,而这一列中大部分的单元格都是按 ...
- 使用gfortran将数据写成Grads格式的代码示例
使用gfortran将数据写成Grads格式的代码示例: !-----'Fortran4Grads.f90' program Fortran4Grads implicit none integer,p ...
- 刺猬大作战(游戏引擎用Free Pascal写成,GUI用C++写成,使用SDL和Qt4)
游戏特性[编辑] 游戏引擎用Free Pascal写成,GUI用C++写成,使用SDL和Qt4[2]. 0.9.12开始支持实时动态缩放游戏画面. 个性化[编辑] 刺猬大作战有着高度定制性 游戏模式: ...
- Python爬虫小实践:寻找失踪人口,爬取失踪儿童信息并写成csv文件,方便存入数据库
前两天有人私信我,让我爬这个网站,http://bbs.baobeihuijia.com/forum-191-1.html上的失踪儿童信息,准备根据失踪儿童的失踪时的地理位置来更好的寻找失踪儿童,这种 ...
- Selenium爬取电影网页写成csv文件
绪论 首先写这个文章的时候仅仅花了2个晚上(我是菜鸟所以很慢),自己之前略懂selenium,但是不是很懂csv,这次相当于练手了. 第一章 环境介绍 具体实验环境 系统 Windows10教育版 1 ...
- indexOf刚开始写成IndexOf出错
{{# if(d.fronturlmin ==null||d.fronturlmin ==""){ }} <img src="@System.Configurati ...
随机推荐
- Django项目:CRM(客户关系管理系统)--26--18PerfectCRM实现King_admin搜索关键字
search_fields = ('name','qq',) 登陆密码设置参考 http://www.cnblogs.com/ujq3/p/8553784.html search_fields = ( ...
- LintCode 链表倒数第n个节点
找到单链表倒数第n个节点,保证链表中节点的最少数量为n. 样例 给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1. 分析:设两个指针 p1和p2 ...
- POSTMAN调试接口post对象
APP回传设备信息,设备信息对象里边包含以下字段 后台是java ssh接收 用对象属性自动封装比较方便 所以,使用 方式进行回传 而不是使用网上说的 设置如下图
- mysql hibernate 查询ip地址在mysql的网段
买的数据库,地址是字符串格式 如何查询一个确定的ip在哪里呢? 直接通过字符串查询估计要慢死了 可以先把自己的要查询的ip转换为数字,然后再去以数字的方式查询 IP转数字1.2.6.0转为数字 SEL ...
- request.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");不加这句话时,从input控件得到值要用new String(request.getParameter( ...
- JQMObile 优势
1.跨平台 目前大部分的移动设备浏览器都支持HTML5标准,jQuery Mobile以HTML5标记配置网页,所以可以跨不同的移动设备,如Apple iOS,Android,BlackBerry, ...
- HDU 4280 Island Transport(dinic+当前弧优化)
Island Transport Description In the vast waters far far away, there are many islands. People are liv ...
- 【洛谷P2907】 【USACO08OPEN】农场周围的道路 水模拟分治
P2907 [USACO08OPEN]农场周围的道路Roads Around The Farm 题目描述 Farmer John's cows have taken an interest in ex ...
- SASS在HTML5移动应用开发中的应用方法
一.什么是SASS SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. 本文总结了SASS的主要用法.二.安装和使用 2.1 安装 SA ...
- Yii 学习笔记
Yii常用执行SQL方法 ====================================================== ================================ ...