oracle如何处理Bitand函数中的负值

时间:2014-04-21 06:28:07

标签: oracle plsql

基本上,我可以理解bit和(n1,n2)函数的一般思想,它会将参数转换为二进制格式并逐位执行位和运算符,然后在返回之前转换回数字。但我无法理解oracle如何计算负值。关于互联网上的消极情况,有非常罕见的材料。我已经阅读了答案https://stackoverflow.com/a/10617716/1443505,它含糊地说“每个参数A都被替换为值SIGN(A)* FLOOR(ABS(A))”。基于这个解释,我仍然无法解释出以下的sql,

SQL> select bitand(6,3), bitand(-6,3), bitand(-6,-3), bitand(-6,3) from dual;

BITAND(6,3) BITAND(-6,3) BITAND(-6,-3) BITAND(-6,3)
----------- ------------ ------------- ------------
          2            2            -8            2

欢迎任何答案,评论或提示。

1 个答案:

答案 0 :(得分:1)

BITAND将其参数转换为2的补码128位整数的二进制表示 因此,-6在执行FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA之前已转换为AND