^
(插入符)运算符在Java中提供什么功能?
当我尝试这个:
int a = 5^n;
...它给我:
对于n = 5,
对于n = 4 ,返回0;对于n = 6,返回1;
对于3
...所以我猜它不执行幂运算。但是那是什么呢?
^
运算符不是用于电源设置的。您将需要Math.pow
代替。请参阅多基因润滑剂的答案。
^
求幂?这只是常识!)。OP对Java语言的探索需要鼓励。
^
(插入符)运算符在Java中提供什么功能?
当我尝试这个:
int a = 5^n;
...它给我:
对于n = 5,
对于n = 4 ,返回0;对于n = 6,返回1;
对于3
...所以我猜它不执行幂运算。但是那是什么呢?
^
运算符不是用于电源设置的。您将需要Math.pow
代替。请参阅多基因润滑剂的答案。
^
求幂?这只是常识!)。OP对Java语言的探索需要鼓励。
Answers:
^
在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,但不是两者!”。
至于整数幂运算,不幸的是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
;该答案的下一部分将解决此任务不需要求幂的问题。
解决您的特定需求,您实际上不需要计算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
正如许多人已经指出的那样,它是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运算符规则=>
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
正如其他人所说,这是按位异或。如果要将数字提高到给定的幂,请使用Math.pow(a , b)
,其中a
是数字,b
是幂。
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
如其他答案所述,它是“异或”(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)。