4

整数の最後の N ビットを抽出する関数が必要です (N < 32 なので、結果は常に正になります)。私はそれを自分で解決できないようです。

私の最初のアプローチは、(32 - n) ビットを左にシフトしてから (32 - n) ビットを右にシフトすることでしたが、Clojure は最初の結果を BigInt に変換するため、最初の 32-n ビットを取り除くことができません。

誰か助けてくれませんか?ありがとう!

4

1 に答える 1

5

あなたが望むのは、ビット単位を使用したものだと思います。たとえば、次のようになります。

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

をとるn 8(bit-shift-left 1 8)256 が得られ、次に(dec 256)255 が得られます。これは、最下位 8 ビットが設定され、上位ビットが 0 である数値です。次に、ビットごとの と は、最下位 8 ビットが にあった数値でxあり、上位ビットが .すべて0です(これがあなたが望むものだと思いますか?)。

免責事項: これはおそらく私が書いた 4 番目の Clojure 関数なので、私も学んでいます...

于 2012-05-08T09:29:37.393 に答える