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