【位运算】java中的左移与右移详解

M进制移N位意味着以M的N次方,移N位意味着以M的N次方。若不能整除,则舍弃余数。

二进制左移n位意味着乘以2的n次方,右移n位意味着除以2的n次方。

<<运算符表示数据整体向左移动。

举例:

|0100 0001| << |0000 1000|  (左移三位)

|1011 0001| << |1000 1000|  (左移四位)

>>运算符在右移的过程中,用符号位填充高位。

举例:

|0100 0001| >> |0000 1000|  (右移三位)

|1011 0001| >> |1111 1011|  (右移四位)

>>>运算符在右移的过程中,用0填充高位。不存在<<<运算符。

举例:

|0100 0001| >>> |0000 1000|  (右移三位)

|1011 0001| >>> |0000 1011|  (右移四位)

使用此方法,可以将一个负数换算成与其绝对值相同的负数。

储存一个汉字需要用32bit,我们可以用byte数组进行存储。

假设我们有以下数据:00010010 10101001 01010101 10101010

这是一个正数,四个区域中每个区域都是正数。但是如果把它拆成四个数,区域二和区域四中的数就被拆成了负数。要想把四个数(两正两负)都转换为正数,并合成一个正数,我们需要把区域二和区域四中的数转换为正数,此时需要用到>>>运算符。

我们用10101001举例:

首先,我们将其左移16位,变为10101001 00000000 00000000

然后将其右移8位,变为00000000 10101001 00000000 00000000

此时,该区域的数变为原数据中该区域的大小(正数)。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值