扩展 MySQL 8.0  / 第 6 章 向 MySQL 添加函数  /  12.13 位函数和运算符

12.13 位函数和运算符

表 12.17 位函数和运算符

姓名 描述
& 按位与
>> 右移
<< 左移
^ 按位异或
BIT_COUNT() 返回设置的位数
| 按位或
~ 按位取反

位函数和运算符包括 BIT_COUNT(), BIT_AND(), BIT_OR(), BIT_XOR(), &, |, ^, ~, <<>>。(BIT_AND()BIT_OR()BIT_XOR()第 12.19.1 节“聚合函数描述”中描述的聚合函数。)位函数和运算符需要BIGINT (64 位整数)参数和返回 BIGINT值,因此它们的最大范围为 64 位。其他类型的参数(例如 the BINARYVARBINARY二进制字符串类型)被转换为BIGINT并且可能会发生截断。

以下列表描述了可用的位函数和运算符:

  • |

    按位或。

    结果是一个无符号的 64 位整数。

    mysql> SELECT 29 | 15;
            -> 31
  • &

    按位与。

    结果是一个无符号的 64 位整数。

    mysql> SELECT 29 & 15;
            -> 13
  • ^

    按位异或。

    结果是一个无符号的 64 位整数。

    mysql> SELECT 1 ^ 1;
            -> 0
    mysql> SELECT 1 ^ 0;
            -> 1
    mysql> SELECT 11 ^ 3;
            -> 8
  • <<

    将 longlong ( BIGINT) 数字向左移动。

    结果是一个无符号的 64 位整数。该值被截断为 64 位。特别是,如果移位计数大于或等于无符号 64 位数字的宽度,则结果为零。

    mysql> SELECT 1 << 2;
            -> 4
  • >>

    将 longlong ( BIGINT) 数字右移。

    结果是一个无符号的 64 位整数。该值被截断为 64 位。特别是,如果移位计数大于或等于无符号 64 位数字的宽度,则结果为零。

    mysql> SELECT 4 >> 2;
            -> 1
  • ~

    反转所有位。

    结果是一个无符号的 64 位整数。

    mysql> SELECT 5 & ~1;
            -> 4
  • BIT_COUNT(N)

    返回在参数中设置 N为无符号 64 位整数的位数,或者 NULL如果参数是 NULL.

    mysql> SELECT BIT_COUNT(29), BIT_COUNT(b'101010');
            -> 4, 3