一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第8天,点击查看活动详情。
前言
上篇我们学习完了逻辑运算符,有兴趣的小伙伴可以阅读(# MySQL学习-运算符(七))。
下面继续学习MySQL中的运算符。今天开始学习位运算符。
逻辑运算符优先级
在学习位运算符之前,先补充一个知识点。上节学习的逻辑运算符,OR和AND是可以一起使用的,但是在使用上需要注意两者的优先级,由于AND的优先级高于OR,因此先对AND两边的操作数进行操作,再与OR中的操作数进行操作。
位运算符
位运算符是在二进制上进行计算的运算符,位运算符会先将操作数变成二进制,然后进行位运算,最后将计算结果从二进制变回十进制数。
MySQL支持的位运算符如下:
| 运算符 | 名称 | 作用 | 示例 |
|---|---|---|---|
| & | 按位与运算符 | 按位与(位AND) | SELECT A & B |
| | | 按位或运算符 | 按位或(位OR) | SELECT A | B |
| 按位异或运算符 | 按位异或(位XOR) | SELECT A ^ B | |
| ~ | 按位取反运算符 | 按位取反 | SELECT ~A |
| >> | 按位右移运算符 | 按位右移 | SELECT A >> 2 |
| << | 按位左移算符 | 按位左移 | SELECT A << 2 |
按位与运算符
运算符示例一
SELECT 12 & 5
FROM DUAL
| 12 & 5 |
|---|
| 4 |
按位与运算符,先把两边的数换算成二进制,进行运算后,再把二进制转换为十进制。
二进制是从右往左,从低到高的。这里先把12和5换算成二进制。二进制一共8位,从低到高依次是2º,2¹,2²,2³,2⁴,2⁵,2⁶,2⁷。
12 = 8 + 4 = 2³ + 2² 换算成二进制是00001100
5 = 4 + 1 = 2² + 2º 换算成二进制是00000101
接着对二进制进行与运算。
| & | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 12 |
| 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 5 | |
| 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 4 |
12与5的二进制进行与运算,还记得逻辑与运算的口诀吗?有假即假,都真才真。从上面的表格可以计算出二进制00000100,转换成十进制是2² = 4。
按位或运算符
运算符示例二
SELECT 12 | 5
FROM DUAL
| 12 | 5 |
|---|
| 13 |
按位或运算符,先把两边的数换算成二进制,进行运算后,再把二进制转换为十进制。
这里先把12和5换算成二进制。
12 = 8 + 4 = 2³ + 2² 换算成二进制是00001100
5 = 4 + 1 = 2² + 2º 换算成二进制是00000101
接着对二进制进行与运算。
| | | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 12 |
| 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 5 | |
| 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 13 |
12与5的二进制进行或运算,还记得逻辑或运算的口诀吗?有真即真,都假才假。从上面的表格可以得出二进制00001101,转换成十进制是2º + 2² + 2³ = 13。
今天先学习到这里,明天继续。