整型数从最小到最大取值,二进制变动机制

public class BitTestMaxAndMin {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int min=0x80000000;
        //Integer包装的整数类中可取的最小值为-2147483648
        int max=0x7fffffff;
        //Integer包装的整数类中可取的最大值为2147483647
        System.out.println("最小整数为:"+min);
        System.out.println("二进制表示:"+Integer.toBinaryString(min));//用二进制表示最小的整数,结果为一个1后跟31个0。左数第一个表示正负,1表示为负数
        System.out.println("右移一位后:"+Integer.toBinaryString(min>>>1));
        System.out.println("转回十进制:"+(min>>>1));//右移,左侧用0补位
        System.out.println();
        
        min--;
        System.out.println("最小整数-1后为:"+min);
        System.out.println("用二进制表示为:"+Integer.toBinaryString(min));//用二进制表示最小的整数,结果为32个1,左数第一个1即32位表示正负,1表示为负数
        System.out.println("将此数右移一位:"+Integer.toBinaryString(min>>>1));//右移,左侧用0补位
        System.out.println("转换为十进制为:"+(min>>>1));
        System.out.println("位的非运算后为:"+(~min>>>1));
        System.out.println("对应二进制数为:"+Integer.toBinaryString(~min>>>1));
        
        System.out.println();
        
        System.out.println("最大整数为:"+max);
        System.out.println("二进制表示:"+Integer.toBinaryString(max));//用二进制表示最大的整数,结果为31个1
        System.out.println("valueOf方法测试:"+Integer.valueOf(Integer.toBinaryString(max), 2));//注意此句能运行        
        System.out.println("0后跟31个1的测试:"+Integer.valueOf("01111111111111111111111111111111", 2));//等同于上句
        System.out.println();

        System.out.println("十进制数取:"+0);
        System.out.println("二进制表示为:"+Integer.toBinaryString(0));
        System.out.println("对0进行位的非运算,十进制表示为:"+~0);
        System.out.println("用二进制表示为:"+Integer.toBinaryString(~0));
        System.out.println("进行右移表示为:"+Integer.toBinaryString(~0>>>1));//~0即为-1右移一位左侧补0后,显示为31个1
        System.out.println("转换为十进制为:"+(~0>>>1));//将这个移位后的二进制数用十进制表示,即Integer能取到的最大值max
        /**
         * 故而可知正整数从0向2147483647取值是由31个0表示的二进制不断加一完成的
         * 而负整数从-2147483648向-1取值也是由1后跟着31个0表示的二进制不断加一完成的
         */

        
        
        /*这里的1能打到31位,已经表示为最大的整数2147483647
         *如果打到32位,并且第一位是1的话,运行Integer中的valueOf方法会报错
         *所谓的32位,第一位用来表示正负,0表示为正数,1表示为负数
         *System.out.println(Integer.valueOf(Integer.toBinaryString(min), 2));的valueOf的参数有32位且都为1,不能运行
         */
    }

}

 

posted on 2017-07-28 12:36  Vic丶绅士  阅读(372)  评论(0编辑  收藏  举报

导航