在Java中,整数(int类型)可以进行位运算,包括按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)和右移(>>)。以下是这些位运算的示例:
- 按位与(&):对应位都为1时结果为1,否则为0。
int a = 5; // 二进制表示:0101 int b = 3; // 二进制表示:0011 int result = a & b; // 结果为1 (二进制表示:0001)
- 按位或(|):对应位有一个为1时结果为1,否则为0。
int a = 5; // 二进制表示:0101 int b = 3; // 二进制表示:0011 int result = a | b; // 结果为7 (二进制表示:0111)
- 按位异或(^):对应位不同时结果为1,否则为0。
int a = 5; // 二进制表示:0101 int b = 3; // 二进制表示:0011 int result = a ^ b; // 结果为6 (二进制表示:0110)
- 按位取反(~):将整数的每一位二进制数值取反,即0变为1,1变为0。
int a = 5; // 二进制表示:0101 int result = ~a; // 结果为-6 (二进制表示:1010)
- 左移(<<):将整数的二进制数值向左移动指定的位数,右边空出的位用0填充。
int a = 5; // 二进制表示:0101 int result = a << 2; // 结果为20 (二进制表示:10100)
- 右移(>>):将整数的二进制数值向右移动指定的位数,左边空出的位用符号位填充(正数用0填充,负数用1填充)。
int a = 5; // 二进制表示:0101 int result = a >> 2; // 结果为1 (二进制表示:0001)
注意:在进行位运算时,要确保操作数的数据类型能够容纳结果,否则可能会发生数据溢出。对于32位整数(int类型),其取值范围为-2^31到2^31-1。在进行右移操作时,如果使用无符号右移(>>>),则左边空出的位总是用0填充,即使操作数是负数。