【问题标题】:Elixir: How to get bit_size of an Integer variable?Elixir:如何获取整数变量的 bit_size?
【发布时间】: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。我的错误我会改正的

标签: binary elixir bitwise-operators elixir-iex


【解决方案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)

    【讨论】:

      猜你喜欢
      • 2018-04-02
      • 2020-05-30
      • 2014-06-16
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多