整数の最後の N ビットを抽出する関数が必要です (N < 32 なので、結果は常に正になります)。私はそれを自分で解決できないようです。
私の最初のアプローチは、(32 - n) ビットを左にシフトしてから (32 - n) ビットを右にシフトすることでしたが、Clojure は最初の結果を BigInt に変換するため、最初の 32-n ビットを取り除くことができません。
誰か助けてくれませんか?ありがとう!
あなたが望むのは、ビット単位を使用したものだと思います。たとえば、次のようになります。
(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 関数なので、私も学んでいます...