计算机是以二进制的补码来运算的
原码
符号位加上数字的二进制表示。二进制中最高位“0”表示正数(+),“1”表示负数(-)反码
正数的反码和原码一样。负数的反码,除了符号位,其他的位数全部取反补码
正数的补码和原码一样。负数的补码为反码 + 1运算符
&:与运算(有0则0)|:或运算(有1则1)^:异或运算(相同则0,不同则1)~:取反运算(0变1,1变0)<<:左移(左边最高位丢弃,右边补齐0)>>:右移(最高位是0,左边补齐0;最高为是1,左边补齐1)>>>:无符号右移(无论最高位是0还是1,左边补齐0)特点:一个数据对另一个数据位异或两次,该数本身不变
public static void main(String[] args) { int a = 10; int b = 20; System.out.PRintln(a ^ b ^ b); //10 System.out.println(a ^ b ^ a); //20}基于该特点可以做整数的交换,无需中间变量,数据也不会溢出整数范围,而且效率最快
public static void main(String[] args) { int a = 10; int b = 20; a = a ^ b; b = a ^ b; a = a ^ b; System.out.println(a); //20 System.out.println(b); //10}新闻热点
疑难解答