INT_MIN与溢出
来源:互联网 发布:街篮手游官网巨人网络 编辑:程序博客网 时间:2024/06/05 09:02
隔了好久没更新了,因为我在学习PL和编译器/解释器的知识。挺好奇这方面的,因为没有学过相关的课程,所以学起来有点吃力,进展缓慢,所以导致没啥可写的。
今天看到这么一段话:
32位的int型的取值是2147483647 到 -2147483648,但是,在C/C++语言中,你不能直接使用 -2147483648 来代替最小负数,因为它不是一个数,而是一个表达式。表达式是:“对正数2147483648取负”,所以,2147483648已经溢出了。这就是为什么INT_MIN总是定义成 (-INT_MAX - 1) 的原因。
之前没注意过这点,本着实践出真知的精神,我就在电脑上运行了下,发现结果是一样样的,用gcc开启Wall也没有任何警告。那么问题来了,究竟是什么情况呢?
后来一位前MSRA的员工告诉我:
这个其实要看标准的版本吧……如果是C8(和谐)9,decimal literal的类型推断顺序是long, unsigned long,所以-21474836(和谐)48的literal会解释成unsigned long,所以取负就跪了;而如果是C++ 11,那推断顺序是long, long long就没啥问题
额,发现基础知识都遗忘了。
1 0
- INT_MIN与溢出
- INT_MIN与溢出
- INT_MIN和INT_MAX溢出问题
- INT_MIN和INT_MAX溢出问题
- INT_MIN和INT_MAX溢出问题
- INT_MIN和INT_MAX溢出问题
- INT_MIN
- INT_MIN
- c中INT_MIN与INT_MAX
- INT_MIN和INT_MAX
- 【climit】INT_MIN & INT_MAX
- INT_MIN的表示法
- INT_MAX,INT_MIN,isdigit函数
- INT_MAX和INT_MIN注意事项
- INT_MAX和INT_MIN注意事项
- 栈桢与溢出
- 进位与溢出
- 进位与溢出
- 触控科技与ARM合作:实现高质量娱乐体验
- 线段树的区间修改
- POJ 2488-A Knight's Journey(DFS)
- arm linux 内核生成过程
- Hibernate主键生成策略
- INT_MIN与溢出
- 选择排序--c语言实现
- 【Spring AOP】基于Schema配置切面
- 博客搬家啦
- 读改善java程序的151个建议(1)
- add binary
- Girl_iOS100天学iOS的第八天(nil)
- hdu1234开门人和关门人(结构体排序)
- Java&&RTTI(运行时类型识别)