^(插入符号)运算符在Java中起什么作用?
当我尝试这样做时:
int a = 5^n;
...它给我:
当n = 5时,返回0 当n = 4时,返回1 当n = 6时,返回3
...所以我猜它不会取幂。但那是什么呢?
^(插入符号)运算符在Java中起什么作用?
当我尝试这样做时:
int a = 5^n;
...它给我:
当n = 5时,返回0 当n = 4时,返回1 当n = 6时,返回3
...所以我猜它不会取幂。但那是什么呢?
当前回答
AraK的链接指向了异或的定义,它解释了这个函数如何对两个布尔值工作。
缺少的信息是如何将其应用于两个整数(或整数类型值)。按位异或应用于两个数字中对应的二进制数字对,结果被重新组合成整数结果。
用你的例子:
5的二进制表示是0101。 4的二进制表示是0100。
定义按位异或的一个简单方法是,在两个输入数字不同的地方,结果都是1。
4和5,唯一的区别是在最后一位;所以
0101 ^ 0100 = 0001 (5 ^ 4 = 1).
其他回答
作为其他答案的补充,值得一提的是,插入操作符也可以与布尔操作数一起使用,它返回true(当且仅当)操作数不同:
System.out.println(true ^ true); // false
System.out.println(true ^ false); // true
System.out.println(false ^ false); // false
System.out.println(false ^ true); // true
Java中的^运算符
^在Java中是异或(“xor”)操作符。
我们以5^6为例:
(decimal) (binary)
5 = 101
6 = 110
------------------ xor
3 = 011
这是位xor (JLS 15.22.1)和逻辑xor (JLS 15.22.2)的真值表:
^ | 0 1 ^ | F T
--+----- --+-----
0 | 0 1 F | F T
1 | 1 0 T | T F
更简单地说,您还可以将xor视为“这个或那个,但不能两者都!”。
另请参阅
维基百科:异
Java中的求幂
至于整数取幂,不幸的是Java没有这样的运算符。你可以使用双重数学。Pow (double, double)(必要时将结果转换为int)。
您还可以使用传统的位移动技巧来计算2的一些幂。也就是说,当k=0..63时,(1L << k)等于2的k次方。
另请参阅
维基百科:算术转移
合并注意:这个答案是从另一个问题合并而来的,该问题的目的是使用幂运算将字符串“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的各种幂。你可以使用所谓的霍纳方案,它不仅简单而且有效。
因为这是您的个人练习,所以我不会给出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
它是java中的位xor运算符,当不同值时结果为1(即1 ^ 0 = 1),当相同值时结果为0(即0 ^ 0 = 0)。
正如其他答案所述,它是“异或”(XOR)操作符。有关Java中位操作符的更多信息,请参见:http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html
要执行幂运算,可以使用Math。战俘相反:
https://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Math.html#pow%28double,%20double%29