在OCaml中将int转换为位数组

时间:2016-11-12 20:03:17

标签: arrays ocaml bit bitarray

我有一个int,让我们说6,我想把它转换成一个数组。

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

有什么功能可以帮我吗?

我需要它成为一个数组,以便我可以将它传递给其他接收布尔数组的函数。

2 个答案:

答案 0 :(得分:3)

可以使用以下函数计算整数n的{​​{1}}位:

x

可以使用 let nth_bit x n = x land (1 lsl n) <> 0 函数创建并初始化数组:

Array.init

这将在LSB(最低有效位)第一顺序中创建一个布尔数组。如果您需要一个整数数组,那么您可以使用函数 let bitarray length x = Array.init length (nth_bit x) 而不是nth_bit_value

nth_bit

我将把它留作练习,以MSB顺序获取数组。

答案 1 :(得分: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|]