宏定义 :#define INT_MIN (-2147483647 - 1)
2015-12-22 09:41
330 查看
2的32次方为2147483648*2,0~(2147483648*2-1)这是32位机上无符号整数代表的范围。而32机的int范围为-2147483648~+2147483647
stackoverflow.com上有人提出这样一个问题:
这将输出true,
而下面的程序会输出false:
下面是对排名第一答案的翻译:
-2147483648不是一个“数”。实际上,-2147483648是一个表达式:一个正整数2147483648和一个一维运算符“-”。对于32位机,2147483648明显已经超过了int的范围。如果long int有“更大的范围”,编译器会自动的假定2147483648为long int型。(C++11的编译器会假定为long long int型)。这样才会得到用户想要的“负的2147483648”
然而很明显,如果long int和int一样,就不会存在“更大的范围”了。这样的话,2147483648溢出了,你的程序的行为是未定义的。
原文地址:http://stackoverflow.com/questions/14695118/2147483648-0-returns-true-in-c#
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溢出了,你的程序的行为是未定义的。
原文地址:http://stackoverflow.com/questions/14695118/2147483648-0-returns-true-in-c#
相关文章推荐
- 支付宝集成
- 使用eclipse和maven生成java web程序war包
- apache 反向代理配置(ubuntu)
- 今天领导分享了一个探测端口的命令-linux下提示bash:command not found
- 学习资源链接
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- win7系统运行命令如何添加到开始菜单栏?
- 类与类关系
- InputStreamReader 和FileReader的区别及InputStream和Reader的区别
- swift 学习记录(实例方法)
- union和union all的区别
- Android 另类方法监听软键盘的弹出收起事件
- Winedt
- 情人节玫瑰花
- WebConfig
- UTF-8 GBK UTF16 GB2312 之间的区别和关系
- 小米手机、红米手机、小米Pad屏幕四周不停闪烁的解决办法,亲测成功!
- VCL标准化皮肤组件Alphacontrols全新发布v10.22|附下载
- codevs 2776 寻找代表——裸的匈牙利算法
- Javascript继承之最佳实践