---
title: "Bit String Functions and Operators"
id: functions-bitstring
pg_version: "20devel"
---
## 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`. (While only type `bit` is mentioned in these tables, values of type `bit varying` can be used interchangeably.) Bit strings support the usual comparison operators shown in [Table 9.1](functions-comparison.md#functions-comparison-op-table), as well as the operators shown in [Table 9.14](functions-bitstring.md#functions-bit-string-op-table).
**Bit String Operators**
| Operator | Description | Example(s) |
| --- | --- | --- |
| `bit` `\|\|` `bit` → bit | Concatenation | `B'10001' \|\| B'011'` → 10001011 |
| `bit` `&` `bit` → bit | Bitwise AND (inputs must be of equal length) | `B'10001' & B'01101'` → 00001 |
| `bit` `\|` `bit` → bit | Bitwise OR (inputs must be of equal length) | `B'10001' \| B'01101'` → 11101 |
| `bit` `#` `bit` → bit | Bitwise exclusive OR (inputs must be of equal length) | `B'10001' # B'01101'` → 11100 |
| `~` `bit` → bit | Bitwise NOT | `~ B'10001'` → 01110 |
| `bit` `<<` `integer` → bit | Bitwise shift left (string length is preserved) | `B'10001' << 3` → 01000 |
| `bit` `>>` `integer` → bit | Bitwise shift right (string length is preserved) | `B'10001' >> 2` → 00100 |
Some of the functions available for binary strings are also available for bit strings, as shown in [Table 9.15](functions-bitstring.md#functions-bit-string-table).
**Bit String Functions**
| Function | Description | Example(s) |
| --- | --- | --- |
| `bit_count` ( `bit` ) → bigint | Returns the number of bits set in the bit string (also known as "popcount"). | `bit_count(B'10111')` → 4 |
| `bit_length` ( `bit` ) → integer | Returns number of bits in the bit string. | `bit_length(B'10111')` → 5 |
| `length` ( `bit` ) → integer | Returns number of bits in the bit string. | `length(B'10111')` → 5 |
| `octet_length` ( `bit` ) → integer | Returns number of bytes in the bit string. | `octet_length(B'1011111011')` → 2 |
| `overlay` ( `bits` `bit` `PLACING` `newsubstring` `bit` `FROM` `start` `integer` [ `FOR` `count` `integer` ] ) → bit | Replaces the substring of `bits` that starts at the `start`'th bit and extends for `count` bits with `newsubstring`. If `count` is omitted, it defaults to the length of `newsubstring`. | `overlay(B'01010101010101010' PLACING B'11111' FROM 2 FOR 3)` → 0111110101010101010 |
| `position` ( `substring` `bit` `IN` `bits` `bit` ) → integer | Returns first starting index of the specified `substring` within `bits`, or zero if it's not present. | `position(B'010' IN B'000001101011')` → 8 |
| `substring` ( `bits` `bit` [ `FROM` `start` `integer` ] [ `FOR` `count` `integer` ] ) → bit | Extracts the substring of `bits` starting at the `start`'th bit if that is specified, and stopping after `count` bits if that is specified. Provide at least one of `start` and `count`. | `substring(B'110010111111' FROM 3 FOR 2)` → 00 |
| `get_bit` ( `bits` `bit`, `n` `integer` ) → integer | Extracts `n`'th bit from bit string; the first (leftmost) bit is bit 0. | `get_bit(B'101010101010101010', 6)` → 1 |
| `set_bit` ( `bits` `bit`, `n` `integer`, `newvalue` `integer` ) → bit | Sets `n`'th bit in bit string to `newvalue`; the first (leftmost) bit is bit 0. | `set_bit(B'101010101010101010', 6, 0)` → 101010001010101010 |
In addition, it is possible to cast integral values to and from type `bit`. 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. 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.