Java 中的 ^ 运算符有什么作用?

2023-12-09

有什么功能^(插入符号)运算符在 Java 中服务?

当我尝试这个时:

int a = 5^n;

...它给了我:

对于 n = 5,返回 0
对于 n = 4,返回 1
对于 n = 6,返回 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!".

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中的 ^ 运算符有什么作用? 的相关文章

随机推荐