逻辑运算符合和位运算符

逻辑运算符

逻辑运算符有与(&&)、或(||)和非(!)

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


posted @ 2021-03-16 10:33  远山紫藤萝花开依旧  阅读(168)  评论(0)    收藏  举报