^操作符在Java中做了什么?

问题:

Java中的^(插入符号)运算符有什么功能?
当我尝试这个:

int a = 5^n;

它给了我:

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

…所以我猜这不执行取幂。但是呢是什么呢?

回答:

Java中的^运算符

 Java中的^是排他或(“xor”)运算符。
我们以5^6为例:

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

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

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

更简单地说,你也可以将xor看作“这个or,但not both!”。

也可以看看

Java中的指数

对于整数求幂,不幸的是Java没有这样的操作符。您可以使用double Math.pow(double, double)(必要时将结果转换为int)。
您还可以使用传统的位移技巧来计算两个权力。也就是说,(1L << k)k=0..63k次幂的两倍

也可以看看

 :这个答案是从另一个问题合并的,其中意图是使用取幂将字符串"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;这个答案的下一部分解决了这个任务不需要求幂。

霍纳的计划

解决您的specific需求,您实际上不需要计算各种各样的权力10.您可以使用所谓的Horner’s scheme,这不仅简单而且高效。
既然你这样做是个人练习,我不会给出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

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: What does the ^ operator do in Java?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 2 = 1