java右移操作_Java中的按位右移运算符

你可以看看这些位.使用

two’s complement表示法,-4和-5的位,为简洁起见仅显示最后8位:

-4: 1111 1100

-5: 1111 1011

位移到右侧2位,带符号扩展:

-4 >> 2: 1111 1111 (-1)

-5 >> 2: 1111 1110 (-2)

通常,您会想到>>>不使用符号扩展,这是真的,但在这种情况下:

r >>>= 2;

…对于使用二进制数字提升的位移操作,值r被提升为int,但是复合赋值运算符将返回值转换回字节,并且移入的零“消失”.

byte r = -5; // 1111 1100

r >>>= -2; // promoted to int: 11111111 11111111 11111111 11111010

// bit shift: 00111111 11111111 11111111 11111110

// cast back to byte: 11111110 (-2)

A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T) ((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.

也就是说,在这种情况下,位移的结果被转换回字节.

当r的值为-4时,发生相同的回送到字节操作.

请注意,如果未完成赋值部分,那么您将看不到相同的答案,因为它不会将结果强制转换回字节:

System.out.println(r >>> 2);

然后你会看到:

1073741822

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值