Java in think中有下面一句话:

若对char,byte 或者short 进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5 个低位才会用到。这样可防止我们在一个int 数里移动不切实际的位数。

 

对上面那句话的理解是:移位操作符操作的对象是二进制的"位",int类型是32位,也就是2的32次幂。如果移动32位以上,原来的数的信息会全部消失,这样也就没有什么意义了。
所以上面的“只有右侧的5个低位才会有用”说的是:移位操作符右端的那个数(化成二进制)的低五位才有用,即x<<y,是指y的低5位才有用,即不能大于32。对于long也是同样道理。

因此,如果对一个int型进行移位,x<<y;
当y小于32时,移位后的结果一般都在能表示的范围,这时就先把y化成二进制数,然后取该二进制数的低5位,再把这5位化成十进制,此时这个十进制就是要对X移动的位数。

例如: int a = 140;
System.out.println(Integer.toBinaryString(a << 34));
上面这个语句的执行过程是:
先把a化成二进制数:1000 1100
执行语句 a << 34时,先把34化成二进制 10 0010,对该二进制数取低5位0 0010,化成十进制数2,所以实际上是对a左移2位。

现在地球人都知道结果是: 10 0011 0000

相关文章:

  • 2021-07-31
  • 2021-04-26
  • 2021-12-16
  • 2022-12-23
  • 2021-10-11
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-06-28
  • 2021-11-28
  • 2021-11-28
  • 2022-12-23
  • 2022-12-23
  • 2021-04-14
相关资源
相似解决方案