3

文档

比特而不是

功能

Usage: (bit-and-not x y)
       (bit-and-not x y & more)

Bitwise and with complement

在 Clojure 1.0 版中添加

Clojure 的其他位函数对我来说很有意义,但我不明白这个。

4

2 回答 2

4

它等价于:

(bit-and x (bit-not y))

此功能可用于进行子集测试。集合a(表示为位掩码)是集合的子集b当且仅当(bit-and-not a b)为零。

于 2013-05-19T02:41:32.117 回答
2

有趣的问题。看起来当您的 Clojure 代码编译为 JVM 字节码时,对的调用(bit-and-not)被转换为对的调用clojure.lang.Numbers.andNot(),如下所示:

static public long andNot(long x, long y){
     return x & ~y;
}

所以也许这是为了性能,如果您需要在内部循环中使用补码进行按位与?

使用补码进行按位与的最常见用例是在使用位掩码时——清除所有xy. 或者也许还有其他原因,为什么这是一个特别有用的操作?

于 2013-05-19T02:53:11.940 回答