public class bitoperator{
public static void main(String[] args) {
System.out.println(2&3);//2
/*2为正数,三码合一,补码也为00000000 00000000 00000000 00000010。
3为正数,三码合一,补码也为00000000 00000000 00000000 00000011。
按位与&,两个数都为1时,取1,结果为00000000 00000000 00000000 00000010(按位与的补码)。
输入结果为原码,此为正数,所以原码也为00000000 00000000 00000000 00000010,结果为2.*/
System.out.println(~-2);//1
/*-2为复数,先得到原码为10000000 00000000 00000000 00000010
反码等于原码除符号位外,其余全取反(0->1,1->0),得到反码为11111111 11111111 11111111 11111101
补码为反码加1,的到补码为11111111 11111111 11111111 11111110
按位取反~,将所有全取反(0->1,1->0,包括符号位)得到,00000000 00000000 00000000 00000001
输入结果为原码,取反后此为正数,所以原码也为00000000 00000000 00000000 00000001,结果为1.*/
System.out.println(~2);//-3
/*2为正数,三码合一,补码也为00000000 00000000 00000000 00000010。
按位取反~,将所有全取反(0->1,1->0,包括符号位)得到,11111111 11111111 11111111 11111101(按位取反的补码)
输入结果为原码,此为负数,所以先算出反码,反码为补码减1,得到11111111 11111111 11111111 11111100
原码为反码除符号位外,其余全取反(0->1,1->0),得到10000000 00000000 00000000 00000011,结果为-3*/
System.out.println(2^3);//1
/*2为正数,三码合一,补码也为00000000 00000000 00000000 00000010。
3为正数,三码合一,补码也为00000000 00000000 00000000 00000011。
按位异或^,两个数一个为1,另一个为0,取1(找不同!),结果为00000000 00000000 00000000 00000001(按位异或的补码)。
输入结果为原码,此为正数,所以原码也为00000000 00000000 00000000 00000001,结果为1.*/
System.out.println(2|3);//3
/*2为正数,三码合一,补码也为00000000 00000000 00000000 00000010。
3为正数,三码合一,补码也为00000000 00000000 00000000 00000011。
按位或|,有一个为1,就取1 00000000 00000000 00000000 00000011,按位或的补码。
输入结果为原码,此为正数,所以原码也为00000000 00000000 00000000 00000011,结果为3.*/
}
}