Elixir:如何获取整数变量的 bit_size?

Posted

技术标签:

【中文标题】Elixir:如何获取整数变量的 bit_size?【英文标题】:Elixir: How to get bit_size of an Integer variable? 【发布时间】:2021-08-08 00:50:48 【问题描述】:

我需要获取一个整数变量中使用的位大小。

像这样:

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

bit_size/1 函数用于“字符串”,而不是整数,但在练习中,需要获取整数的位数。

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

【问题讨论】:

为什么是bit_size(bit_number) == 3?据我所知,它应该返回2,因为它正是2 aka 0b10 天哪,是的.. 我写了 1... tks。我的错误我会改正的 【参考方案1】:

你可以数一数你能把它除以多少次:

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

【讨论】:

【参考方案2】:

这行得通:

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

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

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

【讨论】:

以上是关于Elixir:如何获取整数变量的 bit_size?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 elixir 中将二进制转换为 base10(十进制)整数

如何在 Elixir 中不按 Enter 键获取单个字符?

在 Elixir 中将整数列表打印为字符串

Elixir 变量真的是不可变的吗?

“pin”操作符是干啥用的,Elixir 变量是可变的吗?

Elixir/Erlang:变量列表与许多其他列表合并时出错