Java Shift Operator and auto promotion
我是一个新手Java程序员,Bruce Eckel正在用Java阅读思维。
在第五章中,我们讨论了运算符。他说:
If you shift a char, byte, or short, it will be promoted to int before
the shift takes place, and the result will be an int. Only the five
low-order bits of the right-hand side will be used. This prevents
you from shifting more than the number of bits in an int. If you’re
operating on a long, you’ll get a long result. Only the six
low-order bits of the right-hand side will be used, so you can’t
shift more than the number of bits in a long.
我不明白它的意思。尤其是粗体句子。你能解释一下吗?
我觉得其他答案有点不完整。
的确,一个
同样,
为什么Java这么做,我不知道。在我看来,如果它简单地让你移动大量,将所有的位从整数中移出,并得到0(除了
移位操作的结果视左侧而定,可以解释为
当左侧为
当左侧为
为了将结果限制在这些界限内,必须按以下方式限制右侧:
Only the five low-order bits of the right-hand side will be used.
不允许超过31个班次(0001 1111)
Only the six low-order bits of the right-hand side will be used.
不允许超过63的班次(0011111)
如果使用的数字大于接受的数字,则结果将只使用较低的位(更右边)有效地执行32或64的模运算。
他指的是从你移动的数字中使用的位数,所以对于一个整数,"右手边的五个低阶位"给你5位=2^5=32位,你可以移动整数。类似地,6位=2^6=64,因此只能将long移位64位。请注意,这些数字分别对应于int和long的大小。