【问题标题】:Need help understanding this line需要帮助理解这条线
【发布时间】:2014-08-29 19:05:48
【问题描述】:

提前感谢您提出这个基本问题。

我正在阅读教程,我看到了这一行。

int a = (n & 8) / 8

这应该识别右数第四位是 0 还是 1 的二进制表示。我理解位等的概念,但我不明白这代表什么数学方程(如果有的话)。

有人愿意解释一下这将如何写成数学方程式吗?另外,如果我对这条线的理解还有其他遗漏,请告诉我。谢谢。

【问题讨论】:

  • 您需要了解& 是“按位与”并且对数字的二进制表示进行运算。谷歌“按位与”,你应该会找到一些好的材料。此外,一旦“8”位被隔离,将结果除以 8 将该位向下移动到“1”位置。在纸上完成。

标签: java math binary bit-manipulation logical-operators


【解决方案1】:
  1. 表达式 (n & 8) 用 1000 个二进制数对 n 进行逻辑与。

  2. 这样就得到了右数第四位。

  3. 然后将其除以 8,将值右移 3 个二进制位。 IE。它将第 4 位移动到最右边的位置。

那就更清楚地表达为“>> 3”

所以你的整体表达会是这样的:

  (n AND 1000 )  >> 3

这将 N 的第 4 位留在临时变量中,作为位 0(最右边的位)。 由于 AND,所有其他位都将为零。

【讨论】:

  • +1 同上。谢谢彼得。
【解决方案2】:

十进制的8 是二进制的1000

所以如果你用任何数字bitwise AND

n & 8

仅当第 4 位为 1

时,它将保持 8

如果再除以 8,则返回 1,否则返回 0

例如

9 (1001)

9 & 8

  1001
& 1000
 ------
  1000

现在是第四位是0的情况

对于7 (0111)

7 & 8 

应该是

  0111
& 1000
  -----
  0000

【讨论】:

    【解决方案3】:
    int a = (n & 8) / 8;
    

    n & 8 将逻辑 AND 掩码应用于n 的第 4 位;

         n: 11001010 // example value
         8: 00001000
    result: 00001000
    

    将该数字除以 8 将结果置于最低位:

    result: 00000001
    

    将数字除以2^n 会将数字n 向右移动位(与乘以2^n 将位向左移动的方式相同)。

    结果被赋值给变量a,它现在包含0或1,取决于第4位的值。

    【讨论】:

      【解决方案4】:

      位运算符对位起作用并执行逐位运算。假设如果 a = 60;和b = 13;现在以二进制格式显示如下:

      a = 0011 1100
      b = 0000 1101
      a&b=0000 1100
      

      然后 a&b 也是一个 integer 在您的示例中进一步除以 8。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-11
        • 2016-07-08
        • 2016-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多