2016-11-12 6 views
0

intを取得しました.6とするとビット配列に変換します。OCamlでintをビット配列に変換する

bArr.(0) = 1 
bArr.(1) = 1 
bArr.(2) = 0 

私にこれを行う機能はありますか?

私はブール値配列を受け取る他の関数に渡すことができるように配列にする必要がありました。整数x

答えて

3

n番目のビットは、以下の機能を計算することができる。

let nth_bit x n = x land (1 lsl n) <> 0 

アレイはArray.init関数で作成し、初期化することができる。

let bitarray length x = Array.init length (nth_bit x) 

これはANを作成しますLSB(Least Significant Bit)の第1位のブール値の配列。あなたが整数の配列を必要とする場合は、代わりにnth_bitの機能nth_bit_valueを使用することができます。

let nth_bit_value x n = if nth_bit x n then 1 else 0 

を私はMSB-順に配列を取得するために、練習としてそれを残します。

+0

どのように私は唯一の1つのパラメータでnth_bit呼び出すことができるということですか? –

+0

'nth_bit'はカリー化された関数なので、最初の引数(' x')に適用すると残りの引数(この場合は 'n')を受け付ける関数が返されます。 –

+0

部分的アプリケーションと呼ばれます。 'n'個の引数を持つ関数を持っているときは、' k'個の引数を渡すことができ、その結果は残りの 'n-k'個の引数を受け入れる関数になります。私たちの場合、 '(nth_bit x)'は '(fun i - > nth_bit x i)'と同じです – ivg

0
let int_to_bArr i = 
    let rec int_to_bit acc i = 
    if i=0 then acc 
    else int_to_bit (i land 1::acc) (i lsr 1) 
    in 
    let l=int_to_bit [] i in 
    Array.of_list l   
;; 

テスト

# int_to_bArr 6;; 
- : int array = [|1; 1; 0|] 

それとも

let int_to_bArr i = 
    let rec int_to_bool acc i = 
    if i=0 then acc 
    else int_to_bool (((i land 1)=1)::acc) (i lsr 1) 
    in 
    let l=int_to_bool [] i in 
    Array.of_list l 
;; 

# int_to_bArr 6;; 
- : bool array = [|true; true; false|] 
関連する問題