代码之家  ›  专栏  ›  技术社区  ›  leifericf

为什么elixir位串的最后一位默认为1?

  •  0
  • leifericf  · 技术社区  · 6 年前

    创建3位的位串:

    b = <<1 :: 3>>
    

    使用位串理解来显示每个位的值:

    for <<x :: 1 <- b>>, do: inspect x
    

    输出:

    ["0", "0", "1"]
    

    注意最后一位是1,而不是0。

    为什么所有的位在默认情况下都不是0,并且能以某种方式实现?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Aleksei Matiushkin    6 年前

    代码

    b = <<1 :: 3>>
    

    有效地将长度为3位的位串设置为值 1 (≡ 001) . 要初始化位串使所有位都设置为零,请使用:

    b = <<0 :: 3>>
    

    检查:

    b = <<0 :: 3>>
    for <<x :: 1 <- b>>, do: inspect x
    #⇒ ["0", "0", "0"]
    

    旁注: 例如 b = <<3 :: 3>> 将导致按位表示 3 ≡ 011 等。