[底层] 为什么Integer.MIN_VALUE-1会等于Integer.MAX_VALUE
2015-08-31 18:48
513 查看
Integer.MIN_VALUE-1 = Integer.MAX_VALUE
Integer.MAX_VALUE+1 = Integer.MIN_VALUE
实际上这里是计算机底层的位运算法则问题[1]
计算机底层采用了补码来进行加减乘除的运算,好处是符号位参与运算.
举上面两个例子来说明问题。
Integer.MIN_VALUE: $10000000000000000000000000000000$
Integer.MAX_VALUE: $01111111111111111111111111111111$
-1: $11111111111111111111111111111111$
一、
Integer.MIN_VALUE - 1 = Integer.MIN_VALUE + (-1)
$10000000000000000000000000000000$
+ $11111111111111111111111111111111$
---------------------------------------------------
$1,01111111111111111111111111111111$
舍弃最高位的进位,所以得到的就是Integer.MAX_VALUE
二、
Integer.MAX_VALUE + 1= Integer.MIN_VALUE
$01111111111111111111111111111111$
+ $00000000000000000000000000000001$
---------------------------------------------------
$10000000000000000000000000000000$
除了补码之外,还有反码、移码等等。
1、反码
整数是它本身,负数是符号位不变数值位求反
2、移码
主要用于浮点数的表示当中的阶码
相应的补码符号位求反就是移码
[1] http://wenku.baidu.com/link?url=8ques5GUmTWrFybpKKFQG_bstr-7A4EdLatGIqcFMaL9xtDBgrSrO0GHEvQ5MZgld4u1leMs04wvqsYnnQ9CS_ryY1gu7YyW0n5pdni8_Qy
[2] http://blog.csdn.net/meng4411yu/article/details/8668625
Integer.MAX_VALUE+1 = Integer.MIN_VALUE
实际上这里是计算机底层的位运算法则问题[1]
计算机底层采用了补码来进行加减乘除的运算,好处是符号位参与运算.
举上面两个例子来说明问题。
Integer.MIN_VALUE: $10000000000000000000000000000000$
Integer.MAX_VALUE: $01111111111111111111111111111111$
-1: $11111111111111111111111111111111$
一、
Integer.MIN_VALUE - 1 = Integer.MIN_VALUE + (-1)
$10000000000000000000000000000000$
+ $11111111111111111111111111111111$
---------------------------------------------------
$1,01111111111111111111111111111111$
舍弃最高位的进位,所以得到的就是Integer.MAX_VALUE
二、
Integer.MAX_VALUE + 1= Integer.MIN_VALUE
$01111111111111111111111111111111$
+ $00000000000000000000000000000001$
---------------------------------------------------
$10000000000000000000000000000000$
除了补码之外,还有反码、移码等等。
1、反码
整数是它本身,负数是符号位不变数值位求反
2、移码
主要用于浮点数的表示当中的阶码
相应的补码符号位求反就是移码
[1] http://wenku.baidu.com/link?url=8ques5GUmTWrFybpKKFQG_bstr-7A4EdLatGIqcFMaL9xtDBgrSrO0GHEvQ5MZgld4u1leMs04wvqsYnnQ9CS_ryY1gu7YyW0n5pdni8_Qy
[2] http://blog.csdn.net/meng4411yu/article/details/8668625
相关文章推荐
- UITableview reloadData偶尔出现崩溃
- NGUI消耗性能分析
- 玩转EasyUI之ValidateBox
- iOS开发基础-UIButton
- iOS开发基础-UILabel
- openstack quick start
- 将ueditor上传的视频转换为flowplayer播放,并隐藏其播放地址
- Arduino板的DHT11温湿度传感器使用
- 工作3年。对于目前的工作环境不是很满意打算转战UI设计
- UIGestureRecognizer手势
- UIScrollView 滚动视图的方法总结
- 【EasyUI】Combobox的联动和onChange/onSelect事件绑定
- UIEvent - 3
- android之UEventObserver分析
- [推荐]Android消息处理机制(Handler、Looper、MessageQueue与Message) Android是消息驱动的,实现消息驱动有几个要素: 消息的表示:Message 消息
- UITabBar的背景颜色属性
- UIEvent - 2
- UITableView的使用和点击每个cell跳转到其他controller优化
- UIAlertView在其他页面快速显示?
- poj 3080 Blue Jeans