^操作符在Java中做什么?

^操作符在Java中做什么?,java,operators,exponentiation,Java,Operators,Exponentiation,在Java中,^(插入符号)操作符提供什么功能 当我尝试这个: int a = 5^n; …它给了我: 对于n=5,返回0 对于n=4,返回1 对于n=6,返回3 …所以我猜它不会执行指数运算。但是它是什么呢?它是位运算符。它是位异或,Java没有求幂运算符,您必须使用Math.pow()。正如其他人所说,它是位异或。如果要将一个数字提升到给定的幂,请使用,其中a是一个数字,b是幂。如其他答案所述,它是。有关Java中位运算符的更多信息,请参阅:AraK的链接指向异或的定义,其中解释了该函数如

在Java中,
^
(插入符号)操作符提供什么功能

当我尝试这个:

int a = 5^n;
…它给了我:

对于n=5,返回0
对于n=4,返回1
对于n=6,返回3


…所以我猜它不会执行指数运算。但是它是什么呢?

它是位运算符。

它是位异或,Java没有求幂运算符,您必须使用
Math.pow()

正如其他人所说,它是位异或。如果要将一个数字提升到给定的幂,请使用,其中
a
是一个数字,
b
是幂。

如其他答案所述,它是。有关Java中位运算符的更多信息,请参阅:

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

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

要使用您的示例:

  • 5的二进制表示是0101
  • 4的二进制表示是0100
定义按位异或的一种简单方法是,在两个输入数字不同的每个地方,结果都有一个1

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


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

正如许多人已经指出的,是操作员。许多人也已经指出,如果你想要指数化,那么你需要使用

但我认为还需要注意的是,
^
只是一系列操作符中的一个,统称为位操作符:

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.
操作员名称示例结果描述
a&b和3&5都是1,如果两个位都是1。
a | b或3 | 5 7 1,如果任一位为1。
如果两个位不同,则a^b异或3^5 6 1。
~a not~3-4反转位。
n p右移位5>>2 1将n个右p位置的位移位。如果n是2的补码有符号数,则符号位将移到高阶位置。
n>>>p右移位-4>>>28 15将n个右p位置的位移位。零被移到高阶位置。


当您需要读取和写入单个位应被解释为标志的整数时,或者当整数中的特定位范围具有特殊含义,并且您只想提取这些值时,这些运算符非常有用。您可以每天进行大量编程,而无需使用这些运算符,但如果您必须在位级别处理数据,对这些运算符的良好了解是非常宝贵的。

java中的按位异或运算符会导致不同值为1(即1^0=1),相同值为0(即0^0=0).

Java中的^operator Java中的
^
是异或(“xor”)运算符

让我们以
5^6
为例:

(decimal)    (binary)
     5     =  101
     6     =  110
------------------ xor
     3     =  011
这是按位()和逻辑()异或的真值表:

更简单地说,您也可以将xor视为“这个或那个,但不能两者兼而有之!”

另见

Java中的指数运算 至于整数求幂,不幸的是Java没有这样的操作符。您可以使用(如有必要,将结果强制转换为
int


您还可以使用传统的位移位技巧来计算2的某些幂。也就是说,
(1L要执行求幂运算,可以使用Math.pow:


这是因为您使用的是xor运算符

在java或任何其他语言中,^是按位异或, 所以当然,

10^1=11。


有趣的是,Java和C没有幂运算符。

在其他语言(如Python)中,您可以执行10**2=100,试试。

^是二进制(如base-2)异或,而不是指数运算(作为Java运算符不可用)。有关指数运算,请参阅Java.lang.Math.pow().

java中的按位异或运算符,当以二进制形式写入数字时,其结果为1表示不同的位值(即1^0=1),0表示相同的位值(即0^0=0)

例如:

要使用您的示例:

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

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


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

很多人已经解释了它是什么以及如何使用它,但是除了显而易见的一点之外,你可以使用这个操作符来做很多编程技巧,比如

  • 布尔数组中所有元素的XORing将告诉您该数组是否有奇数个真元素
  • 如果你有一个数组,除了一个重复奇数次的数组外,所有的数字都重复偶数次,你可以通过对所有元素进行异或运算来找到它
  • 在不使用临时变量的情况下交换值
  • 正在查找范围为1到n的缺失编号
  • 通过网络发送的数据的基本验证

很多这样的技巧都可以通过使用位运算符来实现,这是一个值得探索的有趣话题。

它是XOR运算符。它用于对数字进行位运算。它的行为是,当对相同的位执行XOR运算时,比如说0 XOR 0/1 XOR 1,结果是0。但如果任何位不同,则结果是1。 当你做5^3时,你可以看到这些数字5,6的二进制形式,因此表达式变成(101)XOR(110),它给出的结果(011)的十进制表示是3。

XOR运算符规则=>

0 ^ 0 = 0
1 ^ 1 = 0
0 ^ 1 = 1
1 ^ 0 = 1
4、5和6的二进制表示:

4 = 1 0 0 
5 = 1 0 1
6 = 1 1 0
现在,对5和4执行异或操作:

     5 ^ 4 => 1  0  1   (5)
              1  0  0   (4)
            ----------
              0  0  1   => 1
同样地

5 ^ 5 => 1   0   1    (5)
         1   0   1    (5)
       ------------
         0   0   0   => (0)


5 ^ 6 => 1   0   1  (5)
         1   1   0  (6)
        -----------
         0   1   1  => 3
异或算子规则

0 ^ 0 = 0
1 ^ 1 = 0
0 ^ 1 = 1
1 ^ 0 = 1
位运算符在上工作
     5 ^ 4 => 1  0  1   (5)
              1  0  0   (4)
            ----------
              0  0  1   => 1
5 ^ 5 => 1   0   1    (5)
         1   0   1    (5)
       ------------
         0   0   0   => (0)


5 ^ 6 => 1   0   1  (5)
         1   1   0  (6)
        -----------
         0   1   1  => 3
0 ^ 0 = 0
1 ^ 1 = 0
0 ^ 1 = 1
1 ^ 0 = 1
a = 0011 1100

b = 0000 1101



a^b ==> 0011 1100  (a)
        0000 1101  (b)
        -------------  XOR
        0011 0001  => 49

(a ^ b) will give 49 which is 0011 0001