逻辑运算符合和位运算符
逻辑运算符
逻辑运算符有与(&&)、或(||)和非(!)
1.与(&&):当且仅当两个操作数都为真,条件才为真
2.或(||):如果任何两个操作数任何一个为真,条件为真
3.非(!):用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false
//与 && 或 || 非 !
boolean a=true;
boolean b=false;
System.out.println("a&&b:"+(a&&b)); //&&-->都为true结果才为true。只有一个为true, 结果为true
System.out.println("a||b:"+(a||b)); //||-->只要有一个为true,结果就为true
System.out.println("!(a&&b):"+!(a&&b)); //取相反值,如果为true,结果则为false,反之,则 为true
短路运算
对于a&&b,如果a为false,则结果为false,这时b就不会参与运算了;对于a||b,如果a为true,则结果为true,这时b也不会参与运算,这就是短路效应。所以,&&也被称为短路与;||被称为短路非。
//短路运算
int c=5;
boolean d=(c<4)&&(c++<4);
System.out.println(d); //结果为false。&&都为true时,结果为true。现在c<4为false,结果一定为false,后面的就不用执行了
System.out.println(c); //结果为5
System.out.println("-------------------分割线----------------------");
boolean e=(c>4)||(c++<4);
System.out.println(c);
System.out.println(e);
位运算符
位运算符有& | ^ ~ << >> >>>几种
1.&:相对应位都是1,则结果为1,否则为0
2.|:相对应位都是 0,则结果为 0,否则为 1
3.^:相对应位值相同,则结果为0,否则为1
4.~:位取反运算符翻转操作数的每一位,即0变成1,1变成0
5.<<:按位左移运算符。左操作数按位左移右操作数指定的位数
6.>>:按位右移运算符。左操作数按位右移右操作数指定的位数
7.>>>:按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充
/**
* 位运算符 & | ^ ~ << >> >>>
* A=0011 1100
* B=0000 1101
*
* A&B=0000 1100 &-->相对应位都是1,则结果为1,否则为0
* A|B=0011 1101 |-->相对应位都是 0,则结果为 0,否则为 1
* A^B=0011 0001 ^-->相对应位值相同,则结果为0,否则为1
* ~B=1111 0010 ~-->按位取反运算符翻转操作数的每一位,即0变成1,1变成0
* A<<2=1111 0000 <<-->按位左移运算符。左操作数按位左移右操作数指定的位数
* A>>2=1111 >>-->按位右移运算符。左操作数按位右移右操作数指定的位数
* A>>>2=0000 1111 >>>-->按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充
*/
/**
* 快速计算出2*8的值
*
* 二进制 十进制
* 0000 0000 0
* 0000 0001 1
* 0000 0010 2
* 0000 0011 3
* 0000 0100 4
* 0000 1000 8
* 0001 0000 16
*/
System.out.println(2<<3); //结果为16

浙公网安备 33010602011771号