Clojure 有一点get函数吗?
以下是我想要的行为:Clojure 有一点get函数吗?,clojure,bit-manipulation,clojure-java-interop,Clojure,Bit Manipulation,Clojure Java Interop,以下是我想要的行为: user> (bit-get 4 2) > 1 我知道使用位测试可以非常轻松地完成这项工作,即: (defn bit-get [x n] (if (bit-test x n) 1 0)) 但我很好奇是否已经有什么东西了。我可能有点小气,但必须测试某个内容是否为0或1,然后根据该测试返回wehther它是否为0或1,这似乎是次优的(尽管最低限度)。因此,我也很高兴听到有任何方法可以在这里删掉中间人,不管Clojure或Java世界中是否有以前制作的bit
user> (bit-get 4 2)
> 1
我知道使用位测试
可以非常轻松地完成这项工作,即:
(defn bit-get [x n]
(if (bit-test x n) 1 0))
但我很好奇是否已经有什么东西了。我可能有点小气,但必须测试某个内容是否为
0
或1
,然后根据该测试返回wehther它是否为0
或1
,这似乎是次优的(尽管最低限度)。因此,我也很高兴听到有任何方法可以在这里删掉中间人,不管Clojure或Java世界中是否有以前制作的bit get
函数。或者可能我一开始就弄错了,编译或运行时优化的某些方面使得上面的bit get
函数实际上不必运行测试来返回它所测试的值?或者——我对位运算符中涉及的时间/速度优化几乎一无所知——也许它看起来只是次优的,但出于某种原因,它实际上是最快的实现方式?不能说编译器的优化(虽然如果它能够对您的位get
代码进行大量更改,我会感到惊讶),但是-为了自己解决问题-您可以依靠较低级别的逻辑操作位右移
和位和
,例如:
(defn bit-get [x n]
(bit-and (bit-shift-right x n) 1))