2012-05-08 6 views
4

整数の最後のNビットを抽出する関数が必要です(N <になり、結果は常に正です)。私は自分でそれを動作させるように見えることはできません。Clojure - 整数の最後のNビットを抽出する最速の方法は?

私の最初のアプローチは左シフト(32 - n)ビットで右(32 - n)ビットシフトでしたが、Clojureは最初の結果をBigIntに変換していましたので、最初の32-nビット。

誰でも助けてください。ありがとう!私はあなたが何をしたいと思います

答えて

5

はビット単位を使用して何かあると、例えば:

n 8を取る
(defn low-bits [x n] 
    "Get the lowest n bits of x" 
    (bit-and x (unchecked-dec (bit-shift-left 1 n)))) 

(bit-shift-left 1 8)は私たちに256を与え、そして(dec 256)は、私たちに最低8設定ビットと持っている数を255を与えます上位ビット0を指定します。次にビット単位で、数字の小さい方のビットはxにあり、上位ビットはすべて0です(これは私が思うものです)。

免責事項:これは私が書いたprobablty第四Clojureの関数であるので、私はあまりにも学んでいます...

+0

はどうもありがとうございました! –

+0

あなたの関数に ''(low-bits Long/MAX_VALUE 63) ''を呼び出すことを検討してください。 '' dec''では算術的な例外が発生します。 '' unchecked-dec''を使うと、すべてうまくいくでしょう... – sw1nn

+0

@ sw1nnに感謝します。 – DarkOtter

関連する問題