【问题标题】:Bit masking using bit operation &使用位操作的位掩码 &
【发布时间】:2021-03-09 03:32:37
【问题描述】:

我的教科书说

"按位与运算符 & 通常用于屏蔽某些位集,例如 n = n & 0177; 将 n 的低 7 位以外的所有位设置为零。”

但是,根据我的理解,0177的二进制形式是101010001,所以运算n =n & 0177应该保留n的第1、5、7和9位,并将所有其他位设置为零。

谁能指出我理解这个错误的地方?

【问题讨论】:

  • 0177 是一个八进制常量。
  • Editing 添加语言标签将使我们能够为您提供指向语言规范相应部分的链接

标签: bit-manipulation bit


【解决方案1】:

除了 0177 的二进制表示之外,我相信您的理解是正确的。如果这是十进制数,它将是 01111111,如果它是十六进制(我怀疑它是),请不要忘记 0x 前缀!然后是 101110111 所以它会保留不同的位。不确定你从哪里得到 101010001。如果这没有意义,请告诉我。

【讨论】:

  • 如果原始表示为 八进制,则为 01111111 - 十进制10110001
【解决方案2】:

如 cmets 中所述,当 0177 是八进制(以 8 为基数,每位 3 位)数字时,它会起作用。

在几种语言(例如 javascript)中,前导 0 表示八进制数:

var n = 0177; // n now contains the decimal value 127

所以八进制 0177 == 二进制 01 111 111 == 十进制 127

这(0 前缀表示八进制)也是为什么在 javascript 中 parseInt 在一个月输入 0809 时失败的原因,除非您明确指定基数为 10。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多