&& 逻辑与
&&先运算&&左边的算式,如果为假,则直接停止,后面不管有多少运算式都不再运算,如果为真则继续判断后面的式子,只有所有的条件全部成立,才会执行下面的程序
代码语言:javascript复制int a=5;
int b=10;
if(a>6&&b >10) {
System.out.println("全部都为真");
}
System.out.println("a=" a ";b=" b);
运行结果:
代码语言:javascript复制a=5;b=10
这里的b=10,因为a>6不成立,所以后面的语句b >10不再进行判断
& 按位与
(1)、&的运算规则为是先将两边的数转化为二进制,然后运算最终值,运算规则全都为真则结果为真,否则结果为假,1&1=1 , 1&0=0 , 0&1=0 , 0&0=0
3&5的结果为1
(2)、不短路与,作用和&&相同,但不会短路
代码语言:javascript复制int a=5;
int b=10;
//这里将&&替换成&
if(a>6&b >10) {
System.out.println("全部都为真");
}
System.out.println("a=" a ";b=" b);
运行结果:
代码语言:javascript复制a=5;b=11
这里的b=11,因为a>6虽然不为真,但是后面的b 10任然会进行判断,所以b=11
|| 逻辑或
逻辑或运算规则是一个为真则为真,后续不需要再计算,一个为假再计算右边的表达式
代码语言:javascript复制int a=5;
int b=10;
if(a>4||b >10) {
System.out.println("a=" a ";b=" b);
}
运行结果:
代码语言:javascript复制a=5;b=10
这里的b=10,因为a>4已经为真,而逻辑或只要有一个为真则为真,所以不需要再进行后面的语句判断,直接执行下一步
| 按位或
(1)、|按位或和&按位与计算方式都是转化为二进制再计算,不同的是运算规则(一个为真则为真),1|0=1, 1|1=1, 0|1=1, 0|0=0
6|2:6的二进制位0000 0110 , 2的二进制位0000 0010 , 110|010为110,最终值0000 0110,故6|2等于6
(2)、不短路或,作用和||相同,但是不会短路
代码语言:javascript复制int a=5;
int b=10;
//这里将||替换成|
if(a>4|b >10) {
System.out.println("a=" a ";b=" b);
}
运行结果:
代码语言:javascript复制a=5;b=11
这里的b=11,因为虽然a>4为真,整个表达式已经为真,但是仍然会进行后面b >10的判断,所以最终输出结果为b=11
^ 异或
异顾名思义就是不同,^运算规则是相同为0,不同为1,1^0 = 1 , 1^1 = 0 , 0^1 = 1 , 0^0 = 0
5^9:5的二进制位是0000 0101 , 9的二进制位是0000 1001,也就是0101 ^ 1001,结果为1100 , 00001100的十进制位是12
<< 左移运算符
5<<2:5<<2的意思是5的二进制左移2位,右边补0,5的二进制数是0000 0101,左移两位后是0001 0100,正数左边第一位补0,负数左边第一位补1
>> 右移运算符
5>>2:5>>2的意思是5的二进制右移2位,左边补0,5的二进制数是0000 0101,左移两位后是0000 0001,正数左边第一位补0,负数左边第一位补1