## 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**

Operator | Description | Example | Result |
---|---|---|---|

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

.
When working with a bit string, these functions number the first
(leftmost) bit of the string as bit 0.
`set_bit`

In addition, it is possible to cast integral values to and from type
`bit`

.
Some examples:

44::bit(10)000010110044::bit(3)100cast(-44 as bit(12))111111010100'1110'::bit(4)::integer14

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.