整型数从最小到最大取值,二进制变动机制
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,不能运行 */ } }