移位运算符:用于char,byte,short和long的低位比特数。

时间:2018-03-29 22:01:01

标签: bitwise-operators

在Thinking of Java中,有一个会话介绍 Shift操作员说明如下:

“如果你移动一个char,byte或short,它将在移位发生之前被提升为int,结果将是一个int。只有五个低位的将使用右侧。这可以防止你移动超过int中的位数。如果你操作很长时间,你会获得很长的结果。只有将使用右侧的低位,因此您不能移动超过长的位数。“

我的问题是,char是16位,字节是8位,short是16位,long是64位,但是

1)为什么右侧的五个低位将用于char,byte或short,

2)右侧的六个低位将被用于长时间?

谢谢!

1 个答案:

答案 0 :(得分:0)

它说当评估像1 << x这样的表达式时,只使用x的低位。 1 << x相当于1 << (x & 0x1f),而1L << x相当于1L << (x & 0x3f)

  

1)为什么右侧的五个低位将用于char,byte或short,

五位表示你可以将任何距离从0移动到2^5 - 1 = 31.比那更远的移动意味着无论如何都要移过int的末尾。

  

2)右侧的六个低位将被用于长时间?

六位表示你可以将任何距离从0移动到2^6 - 1 = 63.相比之下的移动意味着无论如何都要移过长尾。

例如:1 << 65 == 2,因为只使用65的低5位而65是1000001的二进制,所以低5位只是00001 == 1和{{1} }。