基本上,我可以理解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
欢迎任何答案,评论或提示。
答案 0 :(得分:1)
BITAND
将其参数转换为2的补码128位整数的二进制表示
因此,-6
在执行FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA
之前已转换为AND
。