网站已经改版为Wordpress版本,这里是旧版本的快照,请不要在页面中留言.

2行代码,快速求取int的取值范围

 

·    介绍一下基本的原理

     (-1)>>>1 为啥是int的最大值:

 在计算机的运算中,都是通过补码运算,也就是说所有的算术运算都将或转换成对应的补码进行运算,然后将计算的补码结果结果转换成原码,就是计算所得的结果,以8位的运算为例:

 

   求取最大值:

    对于-1(注意,正数的补码还是自己)

    原码:1000 0001

    反码:1111 1110      (按位取反+1)

    补码:1111 1111 [运算的时候,就是用的这个补码]

    逻辑右移1 :0111 1111        [此时符号位变为了0即是正数]

    运算后的补码:   0111 1111         [正数的补码是本身]

    此时所得的结果就是8int的最大值(正数)

 

    最大值+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);
         }
}


    blob.png


示例代码下载:http://pan.baidu.com/s/1o6z8yNo

解压密码 yscode



本文出自悠然品鉴,转载请注明出处!http://www.youranshare.com/codeorg/sid/122.html


  • 标签:
  • 求取int取值范围
  • 逻辑运算
  • JAVA
网站已经改版为Wordpress版本,这里是旧版本的快照,请不要在页面中留言.