kotlin的符号运算

Fri Apr 11 2025

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

← Back to home