1、定义:程序中的所有数在计算机内存中都是以二进制补码的形式存储的。位运算就是直接对整数在内存中的二进制补码进行操作。 2、分类:
符号名称及运算规则&按位与:全1为1,否则为0按位或:全0为0,否则为1^按位异或:相同为0,否则为1~按位取反:0变为1,1变为0>>右移:补码向右移动相应位数,负数高位补1,正数补0<<左移:向左移动相应位数,低位补0>>>无符号右移:向右移动相应位数,高位补0 //按位与 final byte a = 4;//二进制补码为:0000 0100 final byte b = 5;//二进制补码为:0000 0101 byte c = a & b;//运算后的二进制补码为:0000 0100 System.out.print(c);//输出结果为4 final byte a = -4;//二进制补码为:1111 1100 final byte b = 5;//二进制补码为:0000 0101 byte c = a & b;//运算后的二进制补码为:0000 0100 System.out.print(c);//输出结果为4 //按位或(符号为|) final byte a = -4;//二进制补码为:1111 1100 final byte b = 5;//二进制补码为:0000 0101 byte c = a | b;//运算后的二进制补码为:1111 1101 System.out.print(c);//输出结果为-3 //按位异或 final byte a = -4;//二进制补码为:1111 1100 final byte b = 5;//二进制补码为:0000 0101 byte c = a ^ b;//运算后的二进制补码为:1111 1001 System.out.print(c);//输出结果为-7 //按位非 final byte a = -4;//二进制补码为:1111 1100 byte c = ~a;//运算后的二进制补码为:0000 0011 System.out.print(c);//输出结果为3 //右移 final byte a = -4;//二进制补码为:1111 1100 byte c = a>>2;//运算后的二进制补码为:1111 1111 System.out.print(c);//输出结果为-1(相当于除以2^2) //无符号右移 final int a = -4;//二进制补码为:1111 1111 1111 1111 1111 1111 1111 1100 int c = a>>>2;//运算后结果为:0011 1111 1111 1111 1111 1111 1111 1111 System.out.print(c);//输出结果为1073741823 //左移 final byte a = -4;//二进制补码为:1111 1100 byte c = a<<2;//运算后结果为:1111 0000 System.out.print(c);//输出结果为-16(相当于乘2^2)1、定义:逻辑运算又称布尔运算。java中逻辑运算符的俩边应为Boolean类型。 2、分类:
符号名称及其运算规则&&逻辑与:全真为真,否则为假逻辑或:全假为假,否则为真!逻辑非:真变为假,假变为真 //逻辑与 if(false && true){ System.out.print("if中的运算结果为true");//if中运算结果为false,因此此处不执行 }else{ System.out.print("if中的运算结果为false");//if中运算结果为false,因此此执行 } //逻辑或 if(false || true){ System.out.print("if中的运算结果为true");//if中运算结果为true,因此此处执行 }else{ System.out.print("if中的运算结果为false");//if中运算结果为false,因此此不执行 } //逻辑或的短路 int a = 10, b = 10; if((a=0)==0 || (b=0)==0){ System.out.print(b);//if中运算结果为true,因此此处执行,并且(a=0)==0为true,所以(b=0)==0)不再执行 }else{ System.out.print("if中的运算结果为false");//if中运算结果为false,因此此不执行 } //逻辑非 if(!false){ System.out.print("if中的运算结果为true");//if中运算结果为true,因此此处执行 }else{ System.out.print("if中的运算结果为false");//if中运算结果为false,因此此不执行 }1、运算对象的不同 :逻辑运算只针对Boolean类型的数据 ,位运算还可以对二进制补码进行运算。 2、逻辑或存在短路情况,按位或则不存在。 3、按位取反~与逻辑非!为单目运算符,其余的为双目运算符他们的优先级规则为! ~ << >> & ^ | && || (其他运算符优先级可参照百度) 4、按位异或可以实现不声明第三变量的情况下的俩个数字的交换
int a = 1, b = 2; a = a ^ b; b = a ^ b;//相当于a^b^b结果为a a = a ^ b;//相当于a^b^a结果为b System.out.print("a:" + a + ",b:" + b);//输出结果为:a:2,b:1写在最后:java小白一枚,有错误或修改意见请大神指出!!!感激不尽!!!
