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!".
See also
Java 中的求幂
至于整数求幂,不幸的是Java没有这样的运算符。您可以使用double Math.pow(double, double)(将结果投射到int
如果需要的话)。
您还可以使用传统的位移位技巧来计算 2 的某些幂。那是,(1L << k)
是两个k次方为k=0..63
.
See also
合并笔记:这个答案是从另一个问题合并而来的,其目的是使用求幂来转换字符串"8675309"
to 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 的各种幂。你可以使用所谓的霍纳的计划,不仅简单而且高效。
由于您将此作为个人练习,因此我不会提供 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