我试图围绕 Postgres 如何将数字表示为二进制。如何将固定长度的数字格式化为一串一和零?例子:
select fmt((1<<0)::int2); -- something like 0000 0000 0000 0001
select fmt((1<<2)::int2); -- something like 0000 0000 0000 0100
编辑:我正在研究 postgres 14。
我试图围绕 Postgres 如何将数字表示为二进制。如何将固定长度的数字格式化为一串一和零?例子:
select fmt((1<<0)::int2); -- something like 0000 0000 0000 0001
select fmt((1<<2)::int2); -- something like 0000 0000 0000 0100
编辑:我正在研究 postgres 14。
您可以施放
integer
或bigint
。bit(n)
其余的很容易。值得注意的是,在标准 Postgres中没有为
smallint
(int2
)强制转换 - 直到和包括版本 15:所以将强制转换为
smallint
(int2
)。1<<2
返回integer
(int4
),将其转换为bit(16)
.varbit
输出text
输出每 4 位数字后有一个空格:
小提琴
问题初稿的原始答案
假设从您的显示器:
'00100000000000000'
因为1<<2
-'01000000000000000'
是一个错字。smallint
)。varbit
输出要返回 want
bit varying
,移动17-n
( 17是位字符串的所需长度,然后转换为bit(32)
,匹配整个integer
,并从位置15 (= 32-17 ) 获取一个子字符串。这比转换为text
and更短更便宜背部:substring()
也为 定义varbit
。text
输出reverse()
是为 定义的text
,但不是为bit
。text
但既然我们无论如何都会回来......小提琴