位运算与二进制学习

需要了解二进制码,5 的 二进制码是 101, java 提供方法可以将十进制转换成二进制

将 5 转换成二进制

 

Integer.toUnsignedString(5, 2); 101

正数 符号位为0,负数符号数为1

负数在计算机内以补码显示 -5 的原码如下

10000000000000000000000000000101 原码

按位取反得到原码

11111111111111111111111111111010 反码

反码加1得到补码

11111111111111111111111111111011 补码

正数的原码与补码相同 

 5 的原码如下:

00000000000000000000000000000101 原码

01111111111111111111111111111010 反码

00000000000000000000000000000101 补码

左右(<<)右移(>>)就是将反码按对应的位运算向左(补0)或向右移动(补1或补0)

5 >> 1 结果 10000000000000000000000000000010

 

System.out.println(5>>1); //2
System.out.println(Integer.toUnsignedString(5>>1, 2)); //10(打印时符号位和0会被省略)

5 << 1 结果 10000000000000000000000000001010

 

 

System.out.println(5<<1); //10
System.out.println(Integer.toUnsignedString(5<<1, 2)); //1010

 

-5 >> 1 结果 

补码 11111111111111111111111111111101

转换成反码(补码 -1) 11111111111111111111111111111100

装换成原码 (除符号位安位取反)10000000000000000000000000000011  (-3)

 

System.out.println(Integer.toUnsignedString(-5, 2)); //11111111111111111111111111111011
System.out.println(-5>>1); //-3
System.out.println(Integer.toUnsignedString(-5>>1, 2));//11111111111111111111111111111101

-5 << 1 结果 

补码 11111111111111111111111111110110

 

转换成反码(补码 -1) 11111111111111111111111111110101()

装换成原码 (除符号位安位取反)10000000000000000000000000001010  (-10)

无符号右移预算符( >>>) 符号位也参与移动原位置将补0,这样就说明负数经过无符号右移后(>>>)将变为整数。

代码对比

 

System.out.println(Integer.toUnsignedString(-5, 2));//11111111111111111111111111111011
System.out.println(-5>>1);//-3
System.out.println(Integer.toUnsignedString(-5>>1, 2)); //11111111111111111111111111111101
System.out.println(-5>>>1);//2147483645
System.out.println(Integer.toUnsignedString(-5>>>1, 2));// 1111111111111111111111111111101(注意符号为 0 省略了)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值