## 12.12 Bit Functions and Operators

Table 12.16 Bit Functions and Operators

NameDescription
`BIT_COUNT()` Return the number of bits that are set
`&` Bitwise AND
`~` Bitwise inversion
`|` Bitwise OR
`^` Bitwise XOR
`<<` Left shift
`>>` Right shift

Bit functions and operators comprise `BIT_COUNT()`, `BIT_AND()`, `BIT_OR()`, `BIT_XOR()`, `&`, `|`, `^`, `~`, `<<`, and `>>`. (`BIT_AND()`, `BIT_OR()`, and `BIT_XOR()` are aggregate functions described at Section 12.17.1, “Aggregate (GROUP BY) Function Descriptions”.) Bit functions and operators require `BIGINT` (64-bit integer) arguments and return `BIGINT` values, so they have a maximum range of 64 bits. Arguments of other types (such as the `BINARY` and `VARBINARY` binary string types) are converted to `BIGINT` and truncation might occur.

The following list describes available bit functions and operators:

• Bitwise OR:

```mysql> `SELECT 29 | 15;`
-> 31
```

The result is an unsigned 64-bit integer.

• Bitwise AND:

```mysql> `SELECT 29 & 15;`
-> 13
```

The result is an unsigned 64-bit integer.

• Bitwise XOR:

```mysql> `SELECT 1 ^ 1;`
-> 0
mysql> `SELECT 1 ^ 0;`
-> 1
mysql> `SELECT 11 ^ 3;`
-> 8
```

The result is an unsigned 64-bit integer.

• Shifts a longlong (`BIGINT`) number to the left.

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

The result is an unsigned 64-bit integer. The value is truncated to 64 bits. In particular, if the shift count is greater or equal to the width of an unsigned 64-bit number, the result is zero.

• Shifts a longlong (`BIGINT`) number to the right.

```mysql> `SELECT 4 >> 2;`
-> 1
```

The result is an unsigned 64-bit integer. The value is truncated to 64 bits. In particular, if the shift count is greater or equal to the width of an unsigned 64-bit number, the result is zero.

• Invert all bits.

```mysql> `SELECT 5 & ~1;`
-> 4
```

The result is an unsigned 64-bit integer.

• Returns the number of bits that are set in the argument `N`.

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