更改 Julia 中的位状态

Cap*_*hab 5 julia

在 Julia 语言中,如何设置、清除和反转一位?我希望您不要认为这个问题超出范围或太宽泛;如果是这样,请发表评论而不是否决它。

Rez*_*lan 6

Julia-Lang 文档中有这一段:

目前,仅支持 8 位倍数的大小。因此,布尔值虽然实际上只需要一位,但不能声明为小于八位。

首先,可以看一下变量的二进制表示形式,如下所示:

julia> bits(Int(10)) 
"00000000000000000000000000001010"
Run Code Online (Sandbox Code Playgroud)

其次,可以直接使用二进制形式创建字节值:

julia> val=0b100
0x04

julia> typeof(val)
UInt8
Run Code Online (Sandbox Code Playgroud)

最后,更改位值的最佳方法是对其字节值执行正确的二进制运算:

julia> val | 0b10 # set 2nd bit
0x06

julia> bits(ans)
"00000110"

julia> val & 0b11111011 # clear 3nd bit
0x00
Run Code Online (Sandbox Code Playgroud)

  • 现在应该使用“bitstring”而不是“bits”。 (2认同)

Tet*_*lux 5

我假设您想要清除、设置和检查字节中特定位的状态。

\n\n

在哪里:

\n\n
    \n
  • N代表所讨论的整数;
  • \n
  • n是相关位的编号(即:第n- 位)并且;
  • \n
  • LSB 是1第 位
  • \n
\n\n
\n\n
    \n
  • 设置第n位:N |= 2^(n-1)

  • \n
  • 清除第n位:N &= ~(2^(n-1))

  • \n
  • 通过复制和移位检查位的状态:(N >> (n-1)) & 1 != 0

  • \n
  • 使用位掩码检查位的状态:mask = 2^(n-1); N & mask != mask

  • \n
  • 使用XOR反转/切换/反转第 n 位:。也可以使用该功能。N \xe2\x8a\xbb= 2^(n-1)xor

  • \n
\n

  • 将 `2^n` 更改为 `1<<n` 会快得多 (2认同)