【问题标题】:Is there a bit-get function?有bit-get功能吗?
【发布时间】:2013-11-20 04:13:52
【问题描述】:

这是我想要的行为:

user> (bit-get 4 2)
> 1

我知道这可以使用bit-test 非常容易地完成,即:

(defn bit-get [x n]
  (if (bit-test x n) 1 0))

但我很好奇那里是否已经有任何东西。这对我来说可能有点小气,但它似乎不是最理想的(尽管如此)必须测试某个东西是0 还是1,然后返回它是否是01基于该测试。所以,我也很高兴听到这里有什么方法可以切断中间人,无论在 Clojure 或 Java 世界中是否有任何以前制作的 bit-get 函数。或者也许我一开始就弄错了,关于编译或运行时优化的一些事情使我上面的bit-get 函数实际上不必运行测试只是为了返回它正在测试的值?或者——据我所知,我对按位运算符中涉及的时间/速度优化几乎一无所知——也许它似乎只是次优,但实际上由于某种原因是最快的方法?

【问题讨论】:

    标签: clojure bit-manipulation clojure-java-interop


    【解决方案1】:

    不能说任何关于编译器优化的事情(尽管如果它能够对您的bit-get 代码进行很多更改,我会感到惊讶),但是 - 把事情掌握在自己手中 - 你可以只依靠低级逻辑运算bit-shift-rightbit-and,例如:

    (defn bit-get [x n]
      (bit-and (bit-shift-right x n) 1))
    

    【讨论】:

      猜你喜欢
      • 2020-10-09
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多