Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 有一点get函数吗?_Clojure_Bit Manipulation_Clojure Java Interop - Fatal编程技术网

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))