在Java中有很多运算符,其中移位运算符就是其中之一。移位运算符可以用来进行位操作,将二进制数向左或向右移动指定的位数。这些运算符还可以被用于对数字进行位操作,例如开发人员可以将一个数的二进制数右移来除以 2 的幂次方,或者将其左移来乘以 2 的幂次方。
Java中的移位运算符有三种:
· “<<”——左移
· “>>”——算术右移
· “>>>”——逻辑右移
左移运算符(“<<”)
左移运算符用于将数字向左移动指定的位数,并且在右侧添加零。例如,如果您将数字 2 左移 2 位,那么就会变成 8(即 2 * 2^2)。下面是一些例子:
int a = 5; // 5 的二进制表示为 00000101
int b = a << 2; // 左移 2 位,得到 00010100,即十进制的 20
右移运算符(“>>”)
右移运算符用于将数字向右移动指定的位数,并在左侧添加其符号位的值。对于正数和零,右移会往右移动并添加零;对于负数,它会将其位值右移并在左侧添加一。例如,如果您将数字 16 右移 2 位,那么就会得到 4。以下是几个例子:
int a = 16; // 16 的二进制表示为 00010000
int b = a >> 2; // 右移 2 位,得到 00000100,即十进制的 4
int c = -16; // -16 的二进制表示为 11110000
int d = c >> 2; // 右移 2 位,得到 11111100,即十进制的 -4
逻辑右移运算符(“>>>”)
逻辑右移运算符类似于算术右移运算符,不同之处在于它不考虑符号位,而是将数的二进制位全部右移,左侧用零填充。例如,如果您将数字 -16 向右移动 2 位,则会得到 1073741820。以下是一些例子:
int a = -16; // -16 的二进制表示为 11110000
int b = a >>> 2; // 右移 2 位,得到 00111100,即十进制的 1073741820
其他注意事项
- 移位运算符只能用于整数类型(byte,short,int 和 long)。
- 当您将一个数字左移位到右侧时,会丢弃左侧的位,而超过数据类型的最大长度的位会被丢弃。
- 向右移动时,与数据类型相关的符号位将被复制并添加到移动后的左侧。
- 向右移动还将在左侧磨掉位于数据类型最大有效位数未在左侧添加的所有零。
- 使用右移位进行除法操作时,您可以通过与 1 进行 AND 运算来确定原始数是否为奇数。
总结
Java中的移位运算符是一组十分有用的操作符,它们可用于对二进制数进行按位操作或者对数字进行移位运算。您可以使用左移位运算符(“<<”)将数字向左移动,向右移动时,算术右移位运算符(“>>”)将数的符号位左移到左侧,当使用逻辑右移位运算符(“>>>”)时,左侧则填充零。 如有必要,使用这组运算符可以为开发人员提供更多功能。