int가 있고, 6을 말하면 비트 배열로 변환하고 싶습니다.OCaml에서 int를 비트 배열로 변환
bArr.(0) = 1
bArr.(1) = 1
bArr.(2) = 0
나를 위해이 작업을 수행하는 기능이 있습니까?
부울 배열을받는 다른 함수로 전달할 수 있도록 배열이 필요했습니다.
int가 있고, 6을 말하면 비트 배열로 변환하고 싶습니다.OCaml에서 int를 비트 배열로 변환
bArr.(0) = 1
bArr.(1) = 1
bArr.(2) = 0
나를 위해이 작업을 수행하는 기능이 있습니까?
부울 배열을받는 다른 함수로 전달할 수 있도록 배열이 필요했습니다.
x
의
n
번째 비트는 다음의 함수로 계산 될 수
:
가let nth_bit x n = x land (1 lsl n) <> 0
배열 만들고
Array.init
기능을 초기화 할 수
는 :
let bitarray length x = Array.init length (nth_bit x)
이 만드는 것 LSB (Least Significant Bit) 첫 번째 순서로 부울 배열. 당신은 정수 배열을 필요로하는 경우에, 당신은 nth_bit
대신 기능 nth_bit_value
를 사용할 수 있습니다
let nth_bit_value x n = if nth_bit x n then 1 else 0
나는 MSB-순서로 배열을 얻기 위해, 운동으로 떠날 것이다.
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|]
어떻게 단 1 개 매개 변수 nth_bit 호출 할 수있다? –
'nth_bit'은 카레 함수이므로 첫 번째 인수 ('x')에 적용하면 나머지 인수 (이 경우'n')를 받아들이는 함수가 반환됩니다. –
부분 신청이라고합니다. 'n' 인자를 가진 함수를 가지고 있다면'k' 인자를 넘겨 줄 수 있고 결과는 나머지'n-k' 인자를 받아들이는 함수가 될 것입니다. 우리의 경우,'(nth_bit x)'는'(fun i -> nth_bit x i)'와 동일합니다. – ivg