java中的运算符:
运算符:算术 + - * / % ++ --
赋值 =
扩展 += -= *= /=、关系> < >= <= == != instance、
逻辑 && || ! ^ 、位 & | ^ ~ >> <<
条件 ? :
字符串连接 +
位运算符: &与 |或 ^异或 ~取反 >>右移 <<左移 ,这里把所有的数转换为二进制数字每一位进行相应的位运算,左移相当于乘2右移相当于除2;
注:逻辑运算符 &与 |或 !非 ^异或 (相同为false不同为true) 短路&& (只要有一个为false不校验后面的直接返回false) 短路|| (只要有一个为true不校验后面的直接返回true)
重点介绍一下位运算符中的取反运算
/**
* 测试运算符
*/
public class TestOperator {
public static void main(String[] args){
//位运算符
int m = 3; //转换为二进制是0000 0011
int n = 4; //转换为二进制是0000 0100
int y = -5; //转换为二进制是1000 0101
System.out.println(m&n);// 输出是0 二进制与是0000
System.out.println(m|n);//输出是7 二进制或是0111
System.out.println(m^n);//输出是7 二进制异或是0111
/**
* 补码: 正数最高位是0 负数最高位是1
* 42的补码是00101010
* -42的补码是11010110 计算方法00101010按位取反11010101+1
*
* 正数的补码不变
* 负数的补码是先取反后+1
*
*正数取反是先取反码,然后对得到的反码(是负数按照负数取补码的流程)取补码从而得到需要的原码
*负数取反是先取补码,然后再取反得到反码,然后对反码再取补码得到原码
*/
/**
* 二进制是0000 0011取反得到补码1111 1100 对得到的补码取补码(先取反再+1)0000 0011+1 得到原码 0000 0100 又因为是负数所以所以最高位是1 1000 0011
*/
System.out.println(~m); //输出是-4
/**
* 二进制是 1000 0101 取补码1111 1010+1=1111 1011 取反码 0000 0100 再取补码 0000 0100(正数原码、反码、补码相同)
*/
System.out.println(~y);//输出是4
//移位运算符
int g = 3<<2; //0011左移两位 1100
System.out.println(g);//输出是12 左移1位相当于乘2
System.out.println(g>>2);//输出是3 右移1位想当于除2
//逻辑运算符 !>&&>||
}
}