需要帮助理解这一行

时间:2014-07-08 21:48:30

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

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

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

int a = (n & 8) / 8

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

有人会关心如何用数学方程式写出来吗?另外,如果我在理解这条线路时遗漏了其他任何内容,请告诉我。谢谢。

4 个答案:

答案 0 :(得分:3)

  1. 表达式(n& 8) 是逻辑和n与1000二进制。

  2. 所以从右边获得第4位。

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

  4. 更清楚地表达为" >> 3"

    所以你的整体表达方式如下:

      (n AND 1000 )  >> 3
    

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

答案 1 :(得分:2)

十进制中的

8是二进制中的1000

所以如果您使用任何数字bitwise AND

n & 8

仅当第4位为8

时才会保留1

如果再将它除以8,它将返回1,否则为零

例如

代表91001

9 & 8

将是

  1001
& 1000
 ------
  1000

现在针对第四位为0

的情况

代表70111

7 & 8 

将是

  0111
& 1000
  -----
  0000

答案 2 :(得分:1)

int a = (n & 8) / 8;

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

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

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

result: 00000001

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

结果分配给变量a,现在包含0或1,具体取决于第4位的值。

答案 3 :(得分:0)

按位运算符处理位并执行逐位运算。假设 a = 60;和b = 13;现在采用二进制格式,它们如下:

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

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