public static void main(String[] args) {
int a = -17;
System.out.println("二进制输出"+Integer.toBinaryString(a));
System.out.println("八进制输出"+Integer.toOctalString(a));
System.out.printf("八进制输出"+"%010o\n",a);
//按10位十六进制输出,向右靠齐,左边用0补齐
System.out.printf("十六进制输出"+"%010x\n",a);
//按10位八进制输出,向右靠齐,左边用0补齐
System.out.println("十六进制输出"+Integer.toHexString(a));
System.out.println();
int b = 17;
System.out.println("二进制输出"+Integer.toBinaryString(b));
System.out.println("八进制输出"+Integer.toOctalString(b));
System.out.printf("八进制输出"+"%010o\n",b);
System.out.printf("十六进制输出"+"%010x\n",b);
System.out.println("十六进制输出"+Integer.toHexString(b));
}
运行结果:
二进制输出11111111111111111111111111101111
八进制输出37777777757
八进制输出37777777757
十六进制输出00ffffffef
十六进制输出ffffffef
二进制输出10001
八进制输出21
八进制输出0000000021
十六进制输出0000000011
十六进制输出11
借此理解一下移位运算
public static void main(String[] args) {
int a = -5;
System.out.println(a);
System.out.println("二进制输出"+Integer.toBinaryString(a));
System.out.println(a+"<<2"+"="+(a<<2));
System.out.println("二进制输出"+Integer.toBinaryString(a<<2));
System.out.println(a+">>2"+"="+(a>>2));
System.out.println("二进制输出"+Integer.toBinaryString(a>>2));
System.out.println("无符号右移"+a+">>>2"+"="+(a>>>2));
System.out.println("二进制输出"+Integer.toBinaryString(a>>>2));
System.out.println();
int b = 5;
System.out.println(b);
System.out.println("二进制输出"+Integer.toBinaryString(b));
System.out.println(b+"<<2"+"="+(b<<2));
System.out.println("二进制输出"+Integer.toBinaryString(b<<2));
System.out.println(b+">>2"+"="+(b>>2));
System.out.println("二进制输出"+Integer.toBinaryString(b>>2));
System.out.println("无符号右移"+b+">>>2"+"="+(b>>>2));
System.out.println("二进制输出"+Integer.toBinaryString(b>>>2));
}
运行结果
-5
二进制输出11111111111111111111111111111011
-5<<2=-20
二进制输出11111111111111111111111111101100
-5>>2=-2
二进制输出11111111111111111111111111111110
无符号右移-5>>>2=1073741822
二进制输出111111111111111111111111111110
5
二进制输出101
5<<2=20
二进制输出10100
5>>2=1
二进制输出1
无符号右移5>>>2=1
二进制输出1
左移运算符<<
a<<n 将a的二进制数据左移b位,右边移空的部分补0
可以理解为数字a= a*2^n(移了n位)。5<<2 -->5*2^2=20 -5<<2^2=-20
a>>n 将a的二进制数据右移b位,如果最高位是0,则左边移空的部分补0,如果最高位是1,则左边移空的部分补1
可以理解为数字a= a/2^n(移了n位),向下取整。5>>2 ---> 5/2^2=1; -5>>2 --> -5/2^2=-2 (向下取整)
a>>>n 不管最高位是0或1,左边移空部分都补0
正数可以按右移计算,负数没有捷径。