## 12.12 Bit Functions

Table 12.16 Bitwise Functions

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

MySQL uses `BIGINT` (64-bit) arithmetic for bit operations, so these operators have a maximum range of 64 bits.

• 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
```