下面是Thinking in java的一段:
如果对char,byte或者short类型的数值进行以为处理,那么在移位进行之前,他们会自动转换为int,并且得到的结果也是一个int类型的值,而右侧操作数,作为真正移位的位数,只有其二进制表示中的低5位才有用。这样可防止我们移位超过int类型值所具有的位数。(译注:因为2的5次方为32,而int类型只有32位)若对一个long类型的数值进行处理,最后得到的结果也是long。此时只会用到右操作数的低6位。以防止位移超过long类型数值具有的位数。 (page50)