从文档:
比特而不是
功能
Usage: (bit-and-not x y) (bit-and-not x y & more) Bitwise and with complement
在 Clojure 1.0 版中添加
Clojure 的其他位函数对我来说很有意义,但我不明白这个。
它等价于:
(bit-and x (bit-not y))
此功能可用于进行子集测试。集合a
(表示为位掩码)是集合的子集b
当且仅当(bit-and-not a b)
为零。
有趣的问题。看起来当您的 Clojure 代码编译为 JVM 字节码时,对的调用(bit-and-not)
被转换为对的调用clojure.lang.Numbers.andNot()
,如下所示:
static public long andNot(long x, long y){
return x & ~y;
}
所以也许这是为了性能,如果您需要在内部循环中使用补码进行按位与?
使用补码进行按位与的最常见用例是在使用位掩码时——清除所有x
在y
. 或者也许还有其他原因,为什么这是一个特别有用的操作?