^(插入符号)运算符在Java中起什么作用?

当我尝试这样做时:

int a = 5^n;

...它给我:

当n = 5时,返回0 当n = 4时,返回1 当n = 6时,返回3

...所以我猜它不会取幂。但那是什么呢?


当前回答

它是XOR位操作符。

其他回答

正如其他人所说,这是按位异或。如果你想求一个数字的给定幂,请使用Math。Pow (a, b)这里a是数字,b是幂。

AraK的链接指向了异或的定义,它解释了这个函数如何对两个布尔值工作。

缺少的信息是如何将其应用于两个整数(或整数类型值)。按位异或应用于两个数字中对应的二进制数字对,结果被重新组合成整数结果。

用你的例子:

5的二进制表示是0101。 4的二进制表示是0100。

定义按位异或的一个简单方法是,在两个输入数字不同的地方,结果都是1。

4和5,唯一的区别是在最后一位;所以

0101 ^ 0100 = 0001 (5 ^ 4 = 1).

它是异或运算符。它用于对数字进行位运算。它有这样的行为,当你对相同的位做异或操作,比如0 xor 0 / 1 xor 1,结果是0。但如果任何位不一样,结果就是1。 所以当你计算5^3时,你可以看这些数字5和6的二进制形式,这样表达式就变成了(101)XOR(110)它给出的结果(011)的十进制表示是3。

正如很多人已经指出的,它是异或运算符。许多人也已经指出,如果您想要求幂,那么您需要使用Math.pow。

但我认为注意到^只是被统称为位操作符的操作符家族中的一个也是有用的:

Operator    Name         Example     Result  Description
a & b       and          3 & 5       1       1 if both bits are 1.
a | b       or           3 | 5       7       1 if either bit is 1.
a ^ b       xor          3 ^ 5       6       1 if both bits are different.
~a          not          ~3          -4      Inverts the bits.
n << p      left shift   3 << 2      12      Shifts the bits of n left p positions. Zero bits are shifted into the low-order positions.
n >> p      right shift  5 >> 2      1       Shifts the bits of n right p positions. If n is a 2's complement signed number, the sign bit is shifted into the high-order positions.
n >>> p     right shift  -4 >>> 28   15      Shifts the bits of n right p positions. Zeros are shifted into the high-order positions.

从这里。

当您需要读写整数时,这些操作符可以派上用场,其中各个位应该被解释为标志,或者当整数中的特定位范围具有特殊含义而您只想提取这些位时。您可以在不需要使用这些操作符的情况下进行大量日常编程,但如果您必须在位级上处理数据,那么对这些操作符的良好了解是非常宝贵的。

要执行幂运算,可以使用Math。战俘相反:

https://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Math.html#pow%28double,%20double%29