Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql PL/pgSQL函数返回不正确的按位结果_Postgresql_Plpgsql - Fatal编程技术网

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

Postgresql PL/pgSQL函数返回不正确的按位结果,postgresql,plpgsql,Postgresql,Plpgsql,我有一个PL/pgSQL函数callbackfunc。如果我使用按位结果运行它并在我的应用程序中解压结果,我得到了65/0/65/65(即1090535745)。如果我直接返回按位运算的结果(1094795585)并将其解压缩,则得到65/65/65。为什么? 见下面的示例 CREATE OR REPLACE FUNCTION callbackfunc(value double precision[][][], pos integer[][], VARIADIC userargs text[])

我有一个PL/pgSQL函数
callbackfunc
。如果我使用按位结果运行它并在我的应用程序中解压结果,我得到了
65/0/65/65
(即
1090535745
)。如果我直接返回按位运算的结果(
1094795585
)并将其解压缩,则得到
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;
创建或替换函数callbackfunc(值双精度[]、pos整数[]、可变用户参数文本[])
返回双精度
作为$$
声明
var_结果双精度;
开始

var_result:=(65这是运算符的优先级。按位Or高于Shift。您的表达式将计算为

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