^(插入符号)运算符在Java中具有什么功能?
当我尝试这个:
int a = 5^n;
...它给我:
for n = 5, returns 0
for n = 4, returns 1
for n = 6, returns 3
...所以我猜它不执行幂运算。 但是那是什么呢?
您可以张贴您正在使用的实际代码吗?
我正在使用eclipse并返回11。公共类SimpleParser {公共静态void main(String [] args){System.out.println((10 ^ 1)); }}
在Java中,^运算符不适用于电源设置。 您将需要Math.pow代替。 参见多基因润滑剂的答案。
人们赞成一个简单问题的最佳答案,因为许多人知道并同意它的正确性。 否则,他们会提出一个难题,而有见地的答案却被忽略了,因为很少有人对此有信心。 如果问题和答案都被广泛接受,则可能是一项有趣的民意测验。
@WizardOfOdds:同意,这是一个好问题(^用于求幂?那只是常识!)。 OP对Java语言的探索需要鼓励。
为什么我的电源操作员(^)不起作用?
Java中的^运算子
Java中的^是异或(" xor")运算符。
让我们以5^6为例:
(decimal) (binary)
5 = 101
6 = 110
------------------ xor
3 = 011
这是按位(JLS 15.22.1)和逻辑(JLS 15.22.2)异或的真值表:
^ | 0 1 ^ | F T
--+----- --+-----
0 | 0 1 F | F T
1 | 1 0 T | T F
更简单地说,您也可以将xor视为" this or that,但不能同时使用两者!"。
也可以看看
维基百科:异或
Java的幂运算
至于整数幂运算,不幸的是Java没有这样的运算符。您可以使用double Math.pow(double, double)(如有必要,将结果广播到int)。
您还可以使用传统的移位技巧来计算2的幂。也就是说,(1L << k)是k=0..63的k次幂。
也可以看看
维基百科:算术转换
Merge note: this answer was merged from another question where the intention was to use exponentiation to convert a string "8675309" to int without using Integer.parseInt as a programming exercise (^ denotes exponentiation from now on). The OP's intention was to compute 8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0 = 8675309; the next part of this answer addresses that exponentiation is not necessary for this task.
霍纳计划
满足您的特定需求,您实际上不需要计算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
只是为了添加此答案,OP正在寻找的功能可能是Math.pow(10,1)
正如许多人已经指出的那样,它是XOR运算符。许多人已经指出,如果要求幂,则需要使用Math.pow。
但是,我认为注意到^只是被统称为按位运算符的一系列运算符之一是很有用的:
Operator Name Example Result Description
a & b and 3 & 5 1 1 if both bits are 1.
a | b or 3 | 5 7 1 if either bit is 1.
a ^ b xor 3 ^ 5 6 1 if both bits are different.
~a not ~3 -4 Inverts the bits.
n << p left shift 3 << 2 12 Shifts the bits of n left p positions. Zero bits are shifted into the low-order positions.
n >> p right shift 5 >> 2 1 Shifts the bits of n right p positions. If n is a 2's complement signed number, the sign bit is shifted into the high-order positions.
n >>> p right shift -4 >>> 28 15 Shifts the bits of n right p positions. Zeros are shifted into the high-order positions.
从这里。
当您需要读写将单个位解释为标志的整数时,或者当整数中特定范围的位具有特殊含义并且您只想提取那些整数时,这些运算符会派上用场。您无需使用这些运算符就可以每天进行很多编程,但是如果您必须在位级别使用数据,那么对这些运算符的全面了解将是非常宝贵的。
这是按位XOR,Java没有幂运算符,您必须使用Math.pow()来代替。
它是XOR按位运算符。
XOR运算符规则=>
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执行XOR操作:
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
很多人已经解释了它的含义以及如何使用它,但是除了显而易见的之外,您还可以使用此运算符来执行许多编程技巧,例如
布尔数组中所有元素的XORing会告诉您该数组是否具有奇数个true元素
如果您有一个数组,其中所有数字重复偶数次,但一个数组重复奇数次,则可以通过对所有元素进行异或运算来发现。
交换值而不使用临时变量
查找范围在1到n之间的缺失数字
通过网络发送的数据的基本验证。
使用位运算符可以探索很多这样的技巧,这是一个有趣的话题。
正如其他人所说,这是按位异或。如果要将数字提高到给定的幂,请使用Math.pow(a , b),其中a是数字,而b是幂。
使用Math.pow代替:
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Math.html#pow%28double,%20double%29
XOR运算符规则
0 ^ 0 = 0
1 ^ 1 = 0
0 ^ 1 = 1
1 ^ 0 = 1
按位运算符对位进行运算并执行逐位操作。假设a = 60且b = 13;现在以二进制格式会如下吗?
a = 0011 1100
b = 0000 1101
a^b ==> 0011 1100 (a)
0000 1101 (b)
------------- XOR
0011 0001 => 49
(a ^ b) will give 49 which is 0011 0001
AraK的链接指向"异或"的定义,该定义解释了此函数对两个布尔值的工作方式。
缺少的信息是如何将其应用于两个整数(或整数类型的值)。将按位异或应用于两个数字中的相应二进制数对,然后将结果重新组合为整数结果。
使用您的示例:
5的二进制表示形式是0101。
4的二进制表示形式是0100。
定义按位XOR的一种简单方法是,在两个输入数字不同的每个位置,结果都为1。
对于4和5,唯一的不同是最后一位;所以
0101 ^ 0100 = 0001(5 ^ 4 = 1)。
正如其他答案所述,它是"异或"(XOR)运算符。有关Java中的位运算符的更多信息,请参见:http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html
这是java中的按位xor运算符,当以二进制形式写入数字时,结果1为不同的位值(即1 ^ 0 = 1),结果为0为相同的位值(即0 ^ 0 = 0)。
例如:
使用您的示例:
5的二进制表示形式是0101。
4的二进制表示形式是0100。
定义按位XOR的一种简单方法是,在两个输入数字不同的每个位置,结果都为1。
0101 ^ 0100 = 0001(5 ^ 4 = 1)。
那是因为您正在使用xor运算符。
在Java或几乎所有其他语言中,^是按位异或,
所以当然
10 ^ 1 = 11。
有关按位运算符的更多信息
有趣的是Java和C#没有动力运算符。
它是java中的按位xor运算符,结果为1表示不同的值(即1 ^ 0 = 1),结果为0表示相同的值(即0 ^ 0 = 0)。
^是二进制(如在base-2中)xor,而不是幂(它不能作为Java运算符使用)。有关幂运算,请参见java.lang.Math.pow()。
它是XOR运算符。用于对数字进行位运算。它具有这样的行为,当您对相同的位执行异或运算时,说0 XOR 0/1 XOR 1的结果为0。但是,如果任何位不同,则结果为1。
因此,当您执行5 ^ 3时,您可以查看它们的二进制形式的数字5、6,因此表达式变为(101)XOR(110),给出的结果(011)的十进制表示为3。
在其他语言(如Python)中,您可以执行10 ** 2 = 100,请尝试一下。