gpt4 book ai didi

postgresql - PL/pgSQL 函数返回不正确的按位结果

转载 作者:行者123 更新时间:2023-11-29 12:42:50 24 4
gpt4 key购买 nike

我有一个 PL/pgSQL 函数 callbackfunc。如果我使用按位结果运行它并将结果解压缩到我的应用程序中,我得到 65/0/65/65(即 1090535745)。如果我直接返回按位运算的结果(1094795585)并解压它,我得到了65/65/65/65。为什么?

见下面的例子

CREATE OR REPLACE FUNCTION callbackfunc(value double precision[][][], pos integer[][], VARIADIC userargs text[])
RETURNS double precision
AS $$
DECLARE
var_result double precision;
BEGIN
var_result := (65 << 24 | 65 << 16 | 65 << 8 | 65 << 0);
--var_result := 1094795585;
RETURN var_result;
END;
$$ LANGUAGE 'plpgsql' IMMUTABLE;

最佳答案

这是运算符的优先级。按位或高于 Shift。您的表达式将计算为

var_result := (((((((65 << 24) | 65) << 16) | 65) << 8) | 65) << 0);

给出 1090535745 (= 0x41004141)。在对面

var_result := (65 << 24) | (65 << 16) | (65 << 8) | (65 << 0)

给出 1094795585 (= 0x41414141)。

关于postgresql - PL/pgSQL 函数返回不正确的按位结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40679145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com