一. 逻辑运算符
逻辑运算符有哪些呢?
&(并且) |(或) ^(异或) &&(短路与) ||(短路或) !(非)
逻辑运算符两边一般接boolean类型的表达式或者值,我们在数学运算中描述一个数的范围时一般会这样写:1<x<8,但在Java语言中要表示为x>1&x<8。
&:有false则判断为false,例如2>3&4<5,判断结果为false。
|:有true则判断为true,例如3>2|4>3,判断结果为true。
^:相同为false,不同为true(这一点我觉得可以类比于数字电路的异或逻辑,相同为0,不同为1)。
!:非false则true,非true则false。
&&:&&和&的判断结果是一样的,但&&具有短路效果,如果&&的前一端判断为false,则不需要进行后面一端,直接得出结果,这样更加方便。
||:同理||与|的判断结果也是一样的,但是如果||的前面一端判断为true,同样不需要判断后面一端。
我们在开发中通常用的有:&&,||,!
二. 位运算符
位运算符有哪些呢?
&(与) |(或) ^(异或) ~(按位取反) >>(右移) <<(左移) >>>(无符号右移)
需要注意的是:位运算符是对二进制的补码进行运算的。
&:与运算,在对于某一位的与运算中,只要两个数都为1,则该位的结果为1,否则为0。
|:或运算,在对于某一位的或运算中,两个数只要有一个为1,则该位的结果为1,否则为0。
^:异或运算,两个数相同为0,不同为1。
通过^运算我们可以进行两个值的交换,首先我们要明白位异或运算符的一个特点:一个数据被另一个数据位异或两次,该数是不变的。
例如:
a=a^b;
b=a^b;
a=a^b;
这就完成了a与b的值交换,当然进行值交换还有其他的方法,我们常用的就是利用中间变量交换:int t=0;
t=a;
a=b;
b=t;
这里不再一一介绍,主要体会^的这个特点。
左移运算:<<,移除多少位,被移除的高位丢弃,左边的空位补零。
例如x=00011000,x<<2=01100000
右移运算:>>,被移位的最高位为0,则右边的高位补0,最高位为1时,高位补1。
x=00011000,x>>2=00000110
x=10011000,x>>2=11100110
无符号右移:>>>,无论最高位为1还是0,空缺位都补零。
三.三元运算符
三元运算符的格式:
关系表达式 ?表达式1:表达式2
先执行关系表达式,如果为true,运算后的结果为表达式1,为false结果则为表达式2
例如:int x=a>b?1:0;如果a>b为true,则x=1;a>b为false,x=0。
利用三元运算符可以帮我们判断两个值的大小是否相等。