Kotlin 位运算符详解
Kotlin 提供了对整数类型(如 Int, Long, Byte)的完整位运算符支持,包括移位操作和按位逻辑操作。
位移运算符(Shift Operators)
| 运算符 | 名称 | 含义 | 示例 |
|---|---|---|---|
shl(n) |
带符号左移 | 所有位向左移动 n 位,右边补 0 |
1 shl 3 = 8 |
shr(n) |
带符号右移 | 所有位向右移动 n 位,高位补符号位(正补0,负补1) |
-8 shr 2 = -2 |
ushr(n) |
无符号右移 | 所有位向右移动 n 位,高位补 0 |
-8 ushr 2 = 1073741822 |
测试
println((0b10 shl 2).toPrettyBinary())
// 0000 0000 0000 0000 0000 0000 0000 1000
println((0b100 shr 2).toPrettyBinary())
// 0000 0000 0000 0000 0000 0000 0000 0001
println((0b100 shr 3).toPrettyBinary())
// 0000 0000 0000 0000 0000 0000 0000 0000
println((-10).toPrettyBinary())
// 1111 1111 1111 1111 1111 1111 1111 0110
println((-10 shr 2).toPrettyBinary())
// 1111 1111 1111 1111 1111 1111 1111 1101
println((-10 ushr 2).toPrettyBinary())
// 0011 1111 1111 1111 1111 1111 1111 1101
private fun Int.toPrettyBinary(): String {
return Integer.toBinaryString(this).padStart(32, '0').chunked(4).joinToString(" ")
}按位逻辑运算符(Bitwise Logic Operators)
| 运算符 | 名称 | 含义 | 示例 |
|---|---|---|---|
and |
按位与 | 对应位都为 1 才为 1 |
5 and 3 = 1 (0101 & 0011) |
or |
按位或 | 有任一位为 1 即为 1 |
5 or 3 = 7 (`0101 |
xor |
按位异或 | 相同为 0,不同为 1 |
5 xor 3 = 6 (0101 ^ 0011) |
inv() |
按位取反 | 所有位取反(0 → 1,1 → 0) | 5.inv() = -6 |