· 介绍一下基本的原理
(-1)>>>1 为啥是int的最大值:
在计算机的运算中,都是通过补码运算,也就是说所有的算术运算都将或转换成对应的补码进行运算,然后将计算的补码结果结果转换成原码,就是计算所得的结果,以8位的运算为例:
① 求取最大值:
对于-1:(注意,正数的补码还是自己)
原码:1000 0001
反码:1111 1110 (按位取反+1)
补码:1111 1111 [运算的时候,就是用的这个补码]
逻辑右移1位 得:0111 1111 [此时符号位变为了0即是正数]
运算后的补码: 0111 1111 [正数的补码是本身]
此时所得的结果就是8位int的最大值(正数)
最大值+1,物极则反会变成最小值:
②求取最小值:
由 ①知 最大值为 0111 1111 ,当最大值加上 1的时候 有:
0111 1111
+0000 0001
------------------
1000 0000 [结果是”负零”]
将计算的补码结果 -0 转换成补码即是:
-0:
原码: 1000 0000
反码: 1111 1111
补码: 1 0000 0000 [结果溢出了,也就是我们有时候说的 计算机中存在 ±0的情况,为了使 得-0有意义, -0就是代表最小值 -2^8=-128]
· JAVA的示例代码
public class MinToMax { /* * 本实例是通过移位运算,溢出的思想直接求取int的范围 * >>>操作符是 逻辑 右移,高位补0 低位溢出 */ //求int类型 最大的值 与 最小的值 public static void main(String[] args) { int MaxValue = (-1)>>>1; int MinValue = MaxValue+1; System.out.println(MaxValue); System.out.println(MinValue); } }
示例代码下载:http://pan.baidu.com/s/1o6z8yNo
解压密码 yscode
本文出自悠然品鉴,转载请注明出处!http://www.youranshare.com/codeorg/sid/122.html