Clojure有点不做什么?

时间:2013-05-19 01:55:18

标签: clojure

来自docs

  

位和不

     

功能

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

Bitwise and with complement
     

在Clojure 1.0版中添加

Clojure的其他位功能对我来说很有意义,但我不明白这一点。

2 个答案:

答案 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与补码的最常见用例是在使用位掩码时 - 清除xy中设置的所有位。或者,为什么这是一个特别有用的操作还有其他原因?