Java位运算

Java位运算

位运算符

运算符功能是否包括符号位
&按位与1
|按位或1
~按位非1
^按位异或1
<<位左移1
“>>”位右移1
“>>>”无符号右移0

位移操作说明

位左移

将操作数二进制整体左移指定位数,后空出位置补0,符号位被顶出去。每次左移一次就相当于乘以2,前提在不溢出的情况下

举例:

int a = 0b01000000000000000000000000000001 << 2;
System.out.println(Integer.toBinaryString(a)); // output:100 说明前面都是0,也就是符号位被顶了出去

位右移

整体右移,左面空出的位置补上符号位。每次右移一次就相当于除以2。前提在不是32个1或者32个0的情况下。否则无论右移多少次,真值都不会改变的。

举例:

int a = 0b10000000000000000000000000000000 >> 1;
System.out.println(Integer.toBinaryString(a)); // output: 11000000000000000000000000000000

无符号右移

整体右移,但左边空出的位置置为0,最高位符号位不动

int a = 0b10000000000000000000000000000010 >>> 1;
System.out.println(Integer.toBinaryString(a));// output: 1000000000000000000000000000001

其他注意事项

  1. 对于低于int类型(如byte、short、char)的操作数总是先自动类型转换为int类型后,即带符号扩展为32位后再移位
  2. 对于int类型的整数移位a>>b,当b>32时,系统先对b = b % 32;然后再进行位移。也就是a >> 33 和 a >> 1 的效果相同。
  3. 对于long同理,位移数大于64时,先mod 64然后位移。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值