Java移位运算符总结

本文参考:java移位运算符详解

Java移位运算符有三种

  • << 左移运算符,value<<num
  • >> 右移运算符,value>>num
  • >>> 无符号右移运算符, value>>>num
<< 左移运算符。(value<<num)
2 << 1  // 4

相当与2*2,即将2(value)化为2进制,再向左移移1(num)位,即: 00000010,将1向左移移1位:00000100,化为十进制为4。

  10 << 20

这个相比上个复杂点,但运算方法一样。即:00001010 = 2三次方+2一次方,中的每个1都向左移20位。 即: 输入图片说明 = 10485760

>> 右移运算符 (value>>num)

道理和和左移差不多,只不过是反方向。将1向右移num位,其他空位全部补0.

>>> 无符号右移 (value>>num)

当value是整数时,这种移位方式和‘>>’是一样的。但是当value时负数时则结果完全相反。>>>是不管value转换为2进制后的正负号的,他只管移位,移位后的结果均为整数。看个例子

2>>>1 // 结果为1
-2>>>1 //结果为2147483647 

如果你和博主一样对结果的差别感到震惊的时候,说明你忘了二进制的负数表达方式。

  • 二进制的负数:能被计算机正确识别的是该数补码.(什么?又忘记了什么是补码?)。
  • 补码:该数的反码加1。
  • 反码:原码取反。(即0 -> 1 ,1 -> 0)。
  • 原码:符号位加上真值的绝对值,-1->10000001(什么?不知道什么是绝对值。来,把你的初中体育老师叫来,他怎么教你数学的!)。
  • 关于原码,补码,反码的详细解释戳这里

这里你应该知道-2 的二进制为 111111111111111111111101,再右移后的结果可想而知。

总结

  • 在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方.
  • 右移一位相当于除2,右移n位相当于除以2的n次方。
  • 无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位,无符号右移运算符>>> 只是对32位和64位的值有意义

本次总结就到这里,欢迎吐槽。

转载于:https://my.oschina.net/mercyyang/blog/701212

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值