2

我对 oracle bitand 函数感到困惑。我知道它用于控制是否设置了两个位。但是,被设置是什么意思。何时以及为何使用它。如果你能根据一个真实的例子给出一个例子,那对我来说会很高兴。感谢您的回答。

4

1 回答 1

6

在二进制中,“set”表示“值为 1”。“未设置”表示“值为 0”。

来自 BITAND 的 Oracle 文档:

“结果分几个步骤计算。首先,每个参数 A 都替换为值 SIGN(A)*FLOOR(ABS(A))。这种转换具有将每个参数截断为零的效果。接下来,每个参数 A (现在必须是整数值)转换为 n 位二进制补码二进制整数值。这两个位值使用按位与运算组合。最后,得到的 n 位二进制补码值转换回 NUMBER。

简而言之,此函数截断其参数,将它们转换为二进制数(目前限制为 128 位),将两个二进制数相加,并将二进制数转换回 NUMBER 的结果返回。

以下是所有可能的 0 和 1 组合的结果:

SELECT BITAND(0, 0) AS "0, 0",  -- i.e. 0 AND 0 = 0
       BITAND(0, 1) AS "0, 1",  -- i.e. 0 AND 1 = 0
       BITAND(1, 0) AS "1, 0",  -- i.e. 1 AND 0 = 0
       BITAND(1, 1) AS "1, 1"   -- i.e. 1 AND 1 = 1
  FROM DUAL;

一个更复杂的例子是将 11 和 5 用与运算。在二进制中,十进制的 11 变为“1011”。十进制的 5 变为二进制的“0101”。如果您将这些值与在一起,如

1 0 1 1
0 1 0 1
-------
0 0 0 1

你得到 1 个二进制,当转换回十进制时仍然是 1。

分享和享受。

于 2012-05-16T11:38:11.677 回答