JAVA 二、八、十六进制输出

	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

正数可以按右移计算,负数没有捷径。

 

  • 9
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值