从文档:
比特而不是
功能
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. 或者也许还有其他原因,为什么这是一个特别有用的操作?