在处理整数型数值时,可以直接对组成整形数值的各个位进行操作。
整数型数值在进行位运算前,都需要转换成相应的二进制数。byte 、short 和 char 类型在运算时都会转变成 int 类型(占4个字节),实际移动的次数是该次数与32的余数,例如:移动34次与移动2次产生的结果是一致的。long 类型(占8个字节),实际移动的次数是该次数与64的余数,例如:移动66次与移动2次产生的结果是一致的。
Java使用补码的方式将整数型数值转换成二进制数,整数高位补0,负数高位补1,例如:
0000 0010 // 2
1111 1110 // -2
Java 提供的操作符有:&、|、^、~、«、»、»>。
- & 按位与 And
0010 1010 // 42
0000 1111 // 15
0000 1010 // 42&15
-
按位或 Or
0010 1010 // 42
0000 1111 // 15
0010 1111 // 42|15
- ^ 按位异或 Xor
0010 1010 // 42
0000 1111 // 15
0010 0101 // 42^15
- ~ 按位非 Not
0010 1010 // 42
1101 0101 // ~42
- « 按位左移 将二进制数向左移动对应的位数,高位移出(舍弃),低位的空位补零。
0010 1010 // 42
1010 1000 // 42«2
- >> 带符号右移 将二进制数向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1.
0010 1010 // 42
0000 1010 // 42>>2
1101 0110 // -42
1111 0101 // -42>>2
- >>> 无符号右移 将二进制数向右移动对应的位数,低位移出(舍弃),高位的空位补零。
0010 1010 // 42
0000 1010 // 42>>>2
1101 0110 // -42
1111 0101 // -42>>>2