支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0

9.6. 位元字串函式和運算子 #

本節介紹用於檢查和操作位元字串的函式和運算子,也就是 bitbit varying 型別的值。(雖然這些表格中僅提到 bit 型別,但 bit varying 型別的值可以互換使用。) 位元字串支援表 9.1中顯示的常用比較運算子,以及表 9.14中顯示的運算子。

表 9.14. 位元字串運算子

運算子

描述

範例

bit || bitbit

串聯

B'10001' || B'011'10001011

bit & bitbit

位元 AND (輸入必須具有相同長度)

B'10001' & B'01101'00001

bit | bitbit

位元 OR (輸入必須具有相同長度)

B'10001' | B'01101'11101

bit # bitbit

位元互斥 OR (輸入必須具有相同長度)

B'10001' # B'01101'11100

~ bitbit

位元 NOT

~ B'10001'01110

bit << integerbit

位元左移 (字串長度會保留)

B'10001' << 301000

bit >> integerbit

位元右移 (字串長度會保留)

B'10001' >> 200100


表 9.15顯示的某些用於二進位字串的函式也可用於位元字串。

表 9.15. 位元字串函式

函式

描述

範例

bit_count ( bit ) → bigint

傳回位元字串中設定的位元數 (也稱為popcount)。

bit_count(B'10111')4

bit_length ( bit ) → integer

傳回位元字串中的位元數。

bit_length(B'10111')5

length ( bit ) → integer

傳回位元字串中的位元數。

length(B'10111')5

octet_length ( bit ) → integer

傳回位元字串中的位元組數。

octet_length(B'1011111011')2

overlay ( bits bit PLACING newsubstring bit FROM start integer [ FOR count integer ] ) → bit

bits 字串中,從第 start 個位元開始,延伸 count 個位元的子字串,替換為 newsubstring。如果省略 count,則預設為 newsubstring 的長度。

overlay(B'01010101010101010' placing B'11111' from 2 for 3)0111110101010101010

position ( substring bit IN bits bit ) → integer

傳回指定的 substringbits 中首次出現的起始索引,如果不存在則傳回零。

position(B'010' in B'000001101011')8

substring ( bits bit [ FROM start integer ] [ FOR count integer ] ) → bit

提取 bits 的子字串,如果指定了 start,則從第 start 個位元開始,如果指定了 count,則在 count 個位元後停止。請至少提供 startcount 其中之一。

substring(B'110010111111' from 3 for 2)00

get_bit ( bits bit, n integer ) → integer

從位元字串中提取第 n 個位元;第一個(最左邊的)位元是位元 0。

get_bit(B'101010101010101010', 6)1

set_bit ( bits bit, n integer, newvalue integer ) → bit

將位元字串中的第 n 個位元設定為 newvalue;第一個(最左邊的)位元是位元 0。

set_bit(B'101010101010101010', 6, 0)101010001010101010


此外,還可以將整數值轉換為 bit 類型,以及從 bit 類型轉換為整數值。將整數轉換為 bit(n) 會複製最右邊的 n 個位元。將整數轉換為寬度大於整數本身的位元字串,將在左側進行符號擴展。以下是一些範例:

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

請注意,僅僅轉換為 bit 意味著轉換為 bit(1),因此只會傳回整數的最低有效位元。

提交更正

如果您在文件中發現任何不正確、與特定功能的使用經驗不符或需要進一步澄清的地方,請使用此表格來報告文件問題。