^
(插入符)运算符在Java中提供什么功能?
当我尝试这个:
int a = 5^n;
…它给我:
for n = 5, returns 0 for n = 4, returns 1 for n = 6, returns 3
…所以我猜它不执行幂运算。但是那是什么呢?
Java中的^
运算子
^
在Java中,“异或”运算符。
让我们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视为“ this or that,但不是两者都!”。
Exponentiation in Java
至于整数幂运算,不幸的是Java没有这样的运算符。你可以使用double Math.pow(double, double)
(int如果需要,将结果广播到)。
你还可以使用传统的移位技巧来计算2的幂。也就是说,(1L << k)
对于的第k次幂是2 k=0..63
。
也可以看看
维基百科:算术转换
合并说明:此答案与另一个问题合并,该问题的目的是使用幂运算将字符串转换”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
;该答案的下一部分将解决此任务不需要求幂的问题。
Horner’s scheme
满足你的特定需求,你实际上不需要计算10的各种幂。你可以使用所谓的Horner方案,它不仅简单而且有效。
由于你是个人练习,因此我不会提供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
问题内容: 在阅读Android通知指南时,我偶然发现了这一点: 增加振动 您可以使用默认振动模式或应用程序定义的振动模式来警告用户。 要使用默认模式,请将“ DEFAULT_VIBRATE”添加到默认字段: 这样做很清楚:它将标志添加到通知对象的默认标志。但是,运算符在Java中做什么?它看起来像一个“ OR”,但是它如何工作? 您可以举一个使用数字的例子吗? 谢谢 问题答案: 是按位或分配运算
更新/答案:原来IntelliJ12支持Java 8,后者支持lambda,并且正在“折叠”谓词并将其显示为lambda。下面是“未折叠”代码。
问题内容: 我在这里碰到了这个,总是这样使用: 什么是运营商做的,为什么不使用普通的或? 抱歉,如果以前没有回答,搜索引擎将不喜欢标点符号。 问题答案: http://docs.python.org/reference/expressions.html#notin说: [操作员]和是等效的;为了与C保持一致,是首选。[…]拼写被认为是过时的。
在下面的代码示例中,做什么:
问题内容: 显然,Java中冒号以多种方式使用。有人介意解释它的作用吗? 例如这里: 您将如何以不同的方式编写此循环,以便不合并? 问题答案: 在Java代码中冒号有几个地方: 1)跳出标签): 2)三元条件: 3)每个循环: 4)断言: 5)切换语句中的情况: 6)方法参考