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

当我尝试这样做时:

int a = 5^n;

...它给我:

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

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


当前回答

这是因为使用了异或运算符。

在java或其他语言中,^是位xor, 当然,

10 ^ 1 = 11。 关于逐位操作符的更多信息

有趣的是,Java和c#没有强大的操作符。

其他回答

正如其他答案所述,它是“异或”(XOR)操作符。有关Java中位操作符的更多信息,请参见:http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html

Java中的^运算符

^在Java中是异或(“xor”)操作符。

我们以5^6为例:

(decimal)    (binary)
     5     =  101
     6     =  110
------------------ xor
     3     =  011

这是位xor (JLS 15.22.1)和逻辑xor (JLS 15.22.2)的真值表:

^ | 0 1      ^ | F T
--+-----     --+-----
0 | 0 1      F | F T
1 | 1 0      T | T F

更简单地说,您还可以将xor视为“这个或那个,但不能两者都!”。

另请参阅

维基百科:异


Java中的求幂

至于整数取幂,不幸的是Java没有这样的运算符。你可以使用双重数学。Pow (double, double)(必要时将结果转换为int)。

您还可以使用传统的位移动技巧来计算2的一些幂。也就是说,当k=0..63时,(1L << k)等于2的k次方。

另请参阅

维基百科:算术转移


合并注意:这个答案是从另一个问题合并而来的,该问题的目的是使用幂运算将字符串“8675309”转换为int,而不使用Integer。parseInt作为编程练习(^表示从现在开始的幂)。OP的意图是计算8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0 = 8675309;这个答案的下一部分说明了这个任务不需要求幂。

霍纳的计划

为了满足你的特定需求,你实际上不需要计算10的各种幂。你可以使用所谓的霍纳方案,它不仅简单而且有效。

因为这是您的个人练习,所以我不会给出Java代码,但主要思想如下:

8675309 = 8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0
        = (((((8*10 + 6)*10 + 7)*10 + 5)*10 + 3)*10 + 0)*10 + 9

一开始看起来可能很复杂,但实际上并非如此。基本上就是从左到右读数字,然后在加上下一位数字之前,将目前的结果乘以10。

表格形式:

step   result  digit  result*10+digit
   1   init=0      8                8
   2        8      6               86
   3       86      7              867
   4      867      5             8675
   5     8675      3            86753
   6    86753      0           867530
   7   867530      9          8675309=final

它是java中的位xor运算符,当不同值时结果为1(即1 ^ 0 = 1),当相同值时结果为0(即0 ^ 0 = 0)。

异或运算符规则=>

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 xor 0 / 1 xor 1,结果是0。但如果任何位不一样,结果就是1。 所以当你计算5^3时,你可以看这些数字5和6的二进制形式,这样表达式就变成了(101)XOR(110)它给出的结果(011)的十进制表示是3。