前言: 与、或、非运算符在实际中分为:按‘位’和‘逻辑’
按位主要针对二进制,逻辑结果为true 或 false
逻辑运算符
与 &&
表示逻辑与
逻辑与的意思和and的意思一样的。
当运算符两边的表达式的结果都为true时,整个运算结果才为true。
只要有一方为false,则结果为false。
逻辑运算的两个条件可以是除了数字以外的其他语句
12&&8 =1
3&&-1 =1
5&&0 =0
或 ||
表示逻辑或
逻辑或,是逻辑运算符, “逻辑或”相当于“或者”,当两个条件时,其中有任一个条件满足,“逻辑或”的运算结果就为“真”
12||1 =1 12||0 =1 0||0 =0
非 !
! 运算符被称为逻辑非运算符,执行逻辑 NOT 操作。
它可以反转一个操作数的真值或假值。
如果表达式为 true,那么 ! 运算符将返回 false
如果表达式为 false,则返回 true。
二进制中
与(&)
对于所计算的两个数字,按二进制位进行“与”运算。
具体运算规则:
0&0=0;
0&1=0;
1&0=0;
1&1=1;
两位同为“1”时,结果才为“1”,否则结果为0
例如:3&5
即0000 0011
& 0000 0101
= 0000 0001
3&5的值为1。
或(|)
对于所计算的两个数字,按二进制位进行“或”运算。
运算规则:
0|0=0;
0|1=1;
1|0=1;
1|1=1;
参与运算的两个对象只要有一个为1,其值为1。
例如:3|5
0000 0011
| 0000 0101
= 0000 0111
3|5的值为7。
取反(~)
参与运算的数据,按二进制位进行“取反”运算。
运算规则:
~1=0;
~0=1;
对一个二进制数按位取反,即将0变1,1变0。
异或(^)
对于所计算的两个数据,按二进制位进行“异或”运算。
运算规则:
0^0=0;
0^1=1;
1^0=1;
1^1=0;
如果两个相应值不同,结果为1,否则为0。
例如:9^5
00001001
^00000101
=00001100
9^5结果为12
任何数异或 0 得到的值不变:
a^0 = a
右移 (>>)
向右位移,就是把尾数去掉位数,
例如:5 >> 1,5的二进制是:0101,后面去掉 1位变为 0010
0010转化成十进制就是 2。
移位运算包含“逻辑移位”(logical shift)和“算术移位”(arithmetic shift)。
逻辑移位:移出去的位丢弃,空缺位用 0 填充。
算术移位:移出去的位丢弃,空缺位用“符号位”来填充,所以一般用在右移运算中。
常用运算:(二进制赋值、取值、左移、右移、求余数、向上取整、向下取整)
1.赋值1 -> 或运算(|)
例如:40 | (1<<1) = 42
0010 1000
| 0000 0010
------------------
0010 1010
2.赋值0 -> 与非运算(&~)
例如: 42 & ~(1<<1) = 40
0010 1010 & ~0000 0010
==》
0010 1010
& 1111 1110
---------------
0010 1000
3.取值 -> 与运算(&)
例如:42 & 1<<1 = 2
0010 1010
& 0000 0010
-----------------
0000 0010
4.乘以2 -> 左移一位( << 1)
例如:43 * 2 = 43 << 1 = 86
0010 1011 >> 0101 0110 = 86
5.除以2 -> 右移一位( >> 1)
例如:43 / 2 = 43 >> 1
0010 1011 >> 0001 0101 = 21
6.除以2求余数 -> 与1( &1)
例如:43 % 2 = 43 & 1 = 1
0010 1011
& 0000 0001
---------------
0000 0001