## 9.6. Bit String Functions and Operators

This section describes functions and operators for examining and manipulating bit strings, that is values of the types `bit` and `bit varying`. Aside from the usual comparison operators, the operators shown in Table 9.13 can be used. Bit string operands of `&`, `|`, and `#` must be of equal length. When bit shifting, the original length of the string is preserved, as shown in the examples.

Table 9.13. Bit String Operators

OperatorDescriptionExampleResult
`||`concatenation`B'10001' || B'011'``10001011`
`&`bitwise AND`B'10001' & B'01101'``00001`
`|`bitwise OR`B'10001' | B'01101'``11101`
`#`bitwise XOR`B'10001' # B'01101'``11100`
`~`bitwise NOT`~ B'10001'``01110`
`<<`bitwise shift left`B'10001' << 3``01000`
`>>`bitwise shift right`B'10001' >> 2``00100`

The following SQL-standard functions work on bit strings as well as character strings: `length`, `bit_length`, `octet_length`, `position`, `substring`, `overlay`.

The following functions work on bit strings as well as binary strings: `get_bit`, `set_bit`. When working with a bit string, these functions number the first (leftmost) bit of the string as bit 0.

In addition, it is possible to cast integral values to and from type `bit`. Some examples:

```44::bit(10)                    0000101100
44::bit(3)                     100
cast(-44 as bit(12))           111111010100
'1110'::bit(4)::integer        14
```

Note that casting to just bit means casting to `bit(1)`, and so will deliver only the least significant bit of the integer.

### Note

Casting an integer to `bit(n)` copies the rightmost `n` bits. Casting an integer to a bit string width wider than the integer itself will sign-extend on the left.