浅谈移位运算符与&0xFF操作

Java中的三个移位运算符:">>","<<",">>>"分别有其各自的意义

1. ">>"表示将一个二进制表示的数字进行右移操作,如n>>2,相当于将数字n右移两位,也就是将n除以4的结果。

2."<<"表示将一个二进制表示的数字进行左移操作,如n<<2,相当于将数字n左移两位,也就是将n乘4的结果。

在执行以上位移操作时,由于计算机中使用补码存储数字,对于正数来说,补码等于原码,所以直接进行相应的左移或者右移操作,并在高位或者低位补上即可,特别要注意的是,右移操作时,低位直接舍去;而左移操作时舍去高位会发生溢出使结果出错。如:有一个八位二进制数0100 1010,右移两位变为0001 0010,相当于原数除以4;左移两位变为0010 1000结果溢出。

对于负数来说,补码等于原码按位取反后,末位加1,且最高位为符号位。这时进行位移操作,当右移时高位补充符号位即补1,左移时低位补0。如八位二进制数1100 0100,左移一位后为1000 1000,右移一位后为1110 0010,原数为-60,左移后为-120,右移后为-30。

3.">>>"表示无符号数的右移操作,因为忽视符号位,所以在高位一律补0。

有时我们还会遇到类似于&0xFF这样的操作,如 n = n & 0xFF,这又代表什么呢?

首先解释一下0xFF,这代表的是十六进制数FF即1111 1111,对应十进制即为255,当一个数n对这个 0xFF 作 & 操作时,相当于求n除以256所得的余数,也就是相当于n%256。

设一个十六位二进制数1010 1100 0100 0001要作&FF操作,即将这两个数按位“与”

1010 1100 0100 0001

0000 0000 1111 1111

所的结果为0000 0000 0100 0001

可以看到这个数即为1010 1100 0100 0001除以256的余数。

同理&0x03、&0x0F即为求一个数除以4、除以16所得的余数。


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值