运算符 | 作用 |
NOT 或者 ! | 逻辑非 |
AND 或者 && | 逻辑与 |
OR 或者 || | 逻辑或 |
XOR | 逻辑异或 |
1. NOT 或者 !
逻辑非运算符NOT或者!表示当操作数为0时,所得值为1;当操作数为非零值时,所得值为0;当操作数为NULL时,所得的返回值为NULL。
注意:在使用运算符运算时,一定要注意不同运算符的优先级不同。如果不能确定计算顺序,最好使用括号,以保证运算结果正确。
2. AND或者&&
逻辑与运算符AND或者&&表示当所有操作数均为非零值并且不为NULL时,计算所得结果为1;当一个或者多个操作数为0时,所得结果为0;其余情况返回值为NULL。
注意:"AND"运算符可以有多个操作数,需要注意的是:多个操作数运算时,AND两边一定要使用空格隔开,不然会影响结果正确性。
3. OR 或者 ||
逻辑或运算符OR或者||表示当两个操作数均为非NULL值且任意一个操作数为非零值时,结果为1,否则结果为0;当有一个操作数为NULL,且另一个操作数为非零值时,则结果为1,否则结果为NULL;当两个操作数均为NULL时,则所得结果为NULL。
4. XOR
逻辑异或运算符XOR表示当任意一个操作数为NULL时,返回值为NULL;对于非NULL操作数,如果两个操作数都是非0值或者都是0值,则返回结果为0;如果一个为0值、另一个非0值,返回结果为1.
运算符 | 作用 |
| | 位或 |
& | 位与 |
^ | 位异或 |
<< | 位左移 |
>> | 位右移 |
~ | 位取反,反转所有比特 |
1. 位或运算符(|)
位或运算的实质是将参与运算的几个数据按照对应的二进制数逐位进行逻辑或运算。对应二进制位有一个或两个为1则该位的运算结果为1,否则为0.
2. 位与运算符(&)
位或运算的实质是将参与运算的几个数据按照对应的二进制数逐位进行逻辑与运算。对应二进制位有一个或两个为1则该位的运算结果为1,否则为0.
3. 位异或运算符(^)
位或运算的实质是将参与运算的几个数据按照对应的二进制数逐位进行逻辑异或运算。对应二进制位有一个或两个为1则该位的运算结果为1,否则为0.
4. 位左移运算符(<<)
位左移运算符<<使指定的二进制值的所有位都左移指定的位数。左移指定位数之后,左边高位的数值将被移出去并丢弃,右边低位空出的位置用0补齐。语法格式为:expr<<n。其中,n指定值expr要移位的位数。
5. 位右移运算符(>>)
位左移运算符<<使指定的二进制值的所有位都右移指定的位数。右移指定位数之后,右边地位的数值将被移出去并丢弃,左边高位空出的位置用0补齐。语法格式为:expr<<n。其中,n指定值expr要移位的位数。
优先级 | 运算符 |
最低 | =(赋值运算),:= |
||,OR | |
XOR | |
&&,AND | |
NOT | |
BETWEEN,CASE,WHEN,THEN,ELSE | |
=(比较运算),<=>,>=,>,<=,<,<>,!=,IS,LIKE,REGEXP,IN | |
| | |
& | |
<<,>> | |
-,+ | |
*,/(DIV),%(MOD) | |
^ | |
-(负号),~(位反转) | |
最高 | ! |
建议多使用括号()来改变优先级,并且这样会计算过程更加清晰。
-- end