
# 位运算操作符
M-Compatibility支持的位运算符，包含按位与（\&）、按位或（\|）、按位异或（\^）、左移（\<\<）、右移（\>\>）以及按位取反（\~）六个位运算运算符，具体请参见[表1](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/gaussdb-81-0144.html#ZH-CN_TOPIC_0000002558805327__zh-cn_topic_0000002558053597_zh-cn_topic_0000001790097185_table1030093821715)。
优先级：按位取反 \> 按位异或 \> 左移 = 右移 \> 按位与 \> 按位或。
#### \&操作符
描述：按位进行与操作。
示例：
```
m_db=# SELECT 1 & 1;
 ?column? 
----------
 1
(1 row)
```
#### \|操作符
描述：按位进行或操作。
示例：
```
m_db=# SELECT 1 | 1;
 ?column? 
----------
 1
(1 row)
```
#### \^操作符
描述：按位进行异或操作。
示例：
```
m_db=# SELECT -1 ^ -1;
 ?column? 
----------
 0
(1 row)
```
#### \<\<操作符
描述：左移操作。
示例：
```
m_db=# SELECT 1 << 1;
 ?column? 
----------
 2
(1 row)
```
#### \>\>操作符
描述：右移操作。
示例：
```
m_db=# SELECT -1 >> -1;
 ?column? 
----------
 0
(1 row)
```
#### \~操作符
描述：按位进行非操作。
示例：
```
m_db=# SELECT ~1;
       ?column?       
----------------------
 18446744073709551614
(1 row)
```
#### 位运算操作符规格约束
位运算操作符支持当前M-Compatibility数据库所有已支持的数据类型。如果操作数不为NULL则最终运算结果的类型为BIGINT UNSIGNED；如果其中一个操作数为NULL，则运算结果为NULL。
