移位运算符的限制

Java 移位运算符只能用于整型,不能用于浮点型。也就是说,>>、>>>和<<这 3 个移位运算符并不适合所有的数值类型,它们只适合对 byte、short、char、int 和 long 等整型数进行运算。除此之外,进行移位运算时还有如下规则:

  • 对于低于 int 类型(如 byte、short和 char)的操作数来说,总是先自动类型转换为 int类型后再移位。
  • 对于 int 类型的整数移位,例如 a >> b,当 b > 32 时,系统先用 b 对 32 求余(因为 int 类型只有 32 位),得到的结果才是真正移位的位数。例如,a >> 33 和 a >> l 的结果完全一样,而 a >> 32 的结果和 a 相同。
  • 对 long 类型的整数移位时,例如 a >> b,当 b > 64 时,总是先用 b 对 64 求余(因为 long 类型是 64 位),得到的结果才是真正移位的位数。 当进行位移运算时,只要被移位的二进制码没有发生有效位的数字丢失现象(对于正数而言,通常指被移出的位全部都是 0),不难发现左移 n 位就相当于乘以 2n,右移则相当于除以 2n。这里存在一个问题:左移时,左边舍弃的位通常是无效的,但右移时,右边舍弃的位常常是有效的,因此通过左移和右移更容易看出这种运行结果,并且位移运算不会改变操作数本身,只是得到一个新的运算结果,原来的操作数本身是不会改变的。
原文地址:https://www.cnblogs.com/sakura579/p/13844216.html