Elixir:如何获取 Integer 变量的 bit_size?

Elixir: How to get bit_size of an Integer variable?

我需要获取一个整数变量.

中使用的位的大小

像这样:

bit_number = 1
bit_number = bit_number <<< 2
bit_size(bit_number)   # must return 3 here

bit_size/1函数是针对'strings'的,不是整数,但是在练习中,需要获取整数的位数。

我正在做一本书的压缩练习(Daivid Kopec 的 Python 中的经典计算机科学问题),我正在尝试在 Elixir 中做以供学习。

这个有效:

(iex) import Bitwise
(iex) Integer.digits(1 <<< 1, 2) |> length
2

但我确信有更好的解决方案。

(正如@Hauleth 提到的,这里的答案应该是 2,而不是 3)

你数一数你能把它除以二:

defmodule Example do
  def bits_required(0), do: 1
  def bits_required(int), do: bits_required(int, 1)
  defp bits_required(1, acc), do: acc
  defp bits_required(int, acc), do: bits_required(div(int, 2), acc + 1)
end

输出:

iex> Example.bits_required(4)
3