Java位运算符 对应 Kotlin位运算方法

363 阅读2分钟

在 Java 和 Kotlin 中,位运算符及其功能是相似的。这些运算符用于对二进制位执行操作,如按位与(AND)、按位或(OR)、按位异或(XOR)、按位非(NOT)和位移(左移、右移、无符号右移)。

以下是 Java 和 Kotlin 中位运算符的对应关系:

Java 位运算符

  • & (按位与)
  • | (按位或)
  • ^ (按位异或)
  • ~ (按位非)
  • << (左移)
  • >> (有符号右移)
  • >>> (无符号右移,仅在 Java 中可用)

Kotlin 位运算符

  • and (对应 Java 的 &
  • or (对应 Java 的 |
  • xor (对应 Java 的 ^
  • inv (没有直接的按位非运算符,但你可以使用 x.inv() 来获取 -x - 1,这等效于对无符号整数进行按位非操作)
  • shl (对应 Java 的 <<
  • shr (对应 Java 的 >>
  • ushr (对应 Java 的 >>>

注意:Kotlin 没有直接的按位非运算符,但你可以使用 inv 函数来获取一个数值的按位非结果(对于无符号整数)。然而,inv 实际上返回的是 -x - 1,这在有符号整数的上下文中可能与按位非不完全相同。

示例

Java

	int a = 60; /* 60 = 0011 1100 */    
	int b = 13; /* 13 = 0000 1101 */  
	int c = 0;  

	c = a & b;       /* 12 = 0000 1100 */  
	c = a | b;       /* 61 = 0011 1101 */  
	c = a ^ b;       /* 49 = 0011 0001 */  
	c = ~a;          /*-61 = 1100 0011 */  

	c = a << 2;     /* 240 = 1111 0000 */  
	c = a >> 2;     /* 15 = 0000 1111 */  
	c = a >>> 2;    /* 15 = 0000 1111 */

Kotlin

	val a = 60.toInt() /* 60 = 0011 1100 */    
	val b = 13.toInt() /* 13 = 0000 1101 */  
	var c = 0  

	c = a and b       /* 12 = 0000 1100 */  
	c = a or b        /* 61 = 0011 1101 */  
	c = a xor b       /* 49 = 0011 0001 */  
	// 注意:Kotlin 没有直接的按位非运算符,但可以使用 inv() 函数  
	// val cInv = a.inv()  // 这将返回 -61 的二进制补码表示  
	c = a shl 2     /* 240 = 1111 0000 */  
	c = a shr 2     /* 15 = 0000 1111 */  
	c = a ushr 2    /* 15 = 0000 1111 */

注意:在 Kotlin 中,当你处理字面量时,它们默认是 Int 类型的,所以通常不需要显式地调用 .toInt()。但在上面的示例中,我为了明确性而添加了它。