Java——运算符那些事

&& 逻辑与

&&先运算&&左边的算式,如果为假,则直接停止,后面不管有多少运算式都不再运算,如果为真则继续判断后面的式子,只有所有的条件全部成立,才会执行下面的程序

int a=5;
int b=10;
if(a>6&&b++>10) {
    System.out.println("全部都为真");
}
System.out.println("a="+a+";b="+b);

  

运行结果:

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)、不短路与,作用和&&相同,但不会短路

int a=5;
int b=10;
//这里将&&替换成&
if(a>6&b++>10) {
    System.out.println("全部都为真");
}
System.out.println("a="+a+";b="+b);

  

运行结果:

a=5;b=11  

这里的b=11,因为a>6虽然不为真,但是后面的b++10任然会进行判断,所以b=11

 

|| 逻辑或

逻辑或运算规则是一个为真则为真,后续不需要再计算,一个为假再计算右边的表达式

int a=5;
int b=10;
if(a>4||b++>10) {
    System.out.println("a="+a+";b="+b);
}

 

运行结果:

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)、不短路或,作用和||相同,但是不会短路

int a=5;
int b=10;
//这里将||替换成|
if(a>4|b++>10) {
    System.out.println("a="+a+";b="+b);
}

  

运行结果:

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

 

posted @ 2019-07-10 16:10  五公子说  阅读(406)  评论(0编辑  收藏  举报