&(按位与) :
运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;
|(按位或):
运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;
~ (按位取反) :
运算规则:~1=0; ~0=1;
位同或运算:两个数转为二进制,然后从高位开始比较,如果相同则为1,不相同则为0
^(按位异或)
位异或运算:两个数转为二进制,然后从高位开始比较,如果相同则为0,不相同则为1
两个相同的数异或为0
0 与 1 个数进行异或结果都是该数本身
java中并没有同或运算符,可以通过异或转换得到。同或运算 = 异或运算 ^ 1
```java
import java.util.Scanner;
public class problem7 {
/** * @param args */
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String strA = sc.nextLine();
String strB = sc.nextLine();
byte[] byteA = strA.getBytes();
byte[] byteB = strB.getBytes();
for( int i = 0 ; i < byteA.length ; i++ ){
int ad = ((byteA[i]-'0')^(byteB[i]-'0')) ^ 1;
System.out.print(ad);
}
}
}
按位异或就是无进位的加法 , 而与运算产生进位
附上Leetcode题 :
实现 :
class Solution {
public int getSum(int a, int b) {
if (a == 0) return b;
if (b == 0) return a;
return getSum(a ^ b, (a & b) << 1);
}
}
另外 ,补充一下java输出:
① d格式符 用来输出十进制整数
② o格式符 以八进制形式输出整数
③ x格式符 以十六进制形式输出整数
输出二进制调用 Integer.toBinaryString 方法