(一)逻辑操作 &(与) |(或) ~(非)
非:
A | ~A |
1 | 0 |
0 | 1 |
与:
A | B | A & B |
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
或:
A | B | A | B |
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
(二)条件运算 &&、||、!
非关系表:
A | !A |
true | false |
false | true |
与:
A | B | A && B |
false | false | false |
true | false | false |
false | true | false |
true | true | true |
或:
A | B | A || B |
false | false | false |
true | false | true |
false | true | true |
true | true | true |
逻辑运算和条件运算的区别
a 条件操作只能是布尔型的,而逻辑操作不仅可以操作布尔型的,还可以操作数值型
b 逻辑操作不会发生短路
下面解释一下短路的现象
如 if( 1==1 && 1==2 && 1==3)
代码从左到右开始执行,指定第一个表达式1==1是为true,因为是为true,然后就开始运算1==2,运算了第二个表达式过后结果如下:
true && false && 1==3
到了这个时候就不再运算下去了,因为在这种运算里面第二个表达式为false,这种情况就短路了,因为不论最后一个表达式为什么,最终返回就已经是false,短路现象在&&和||中都是常见的,再如: if( 1==1 &1==2 & 1==3)
虽然第二个条件文件,但是程序还是会执行1==3.这样就不存在短路的现象
(三) 位运算符 “>> 右移”;“<< 左移”;“>>> 无符号右移”
注意:右移相当于是除,左移相当于就是乘,左移一位乘以2,左移二位乘以4,依此类推。 无论正数、负数,它们的右移、左移、无符号右移32位都是其本身,
比如 -5<<32=-5、-5>>32=-5、-5>>>32=-5
如:-5>>3=-1
-5<<3=-40 5>>3=0 5<<3=40
-5>>>3=536870911
曾经有这样的一道面试题:用最快的方法算出2乘以8等于几?
答案:2<<3;