Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要帮助理解这行吗_Java_Math_Binary_Bit Manipulation_Logical Operators - Fatal编程技术网

Java 需要帮助理解这行吗

Java 需要帮助理解这行吗,java,math,binary,bit-manipulation,logical-operators,Java,Math,Binary,Bit Manipulation,Logical Operators,提前感谢您提出这个基本问题 我正在通过一个教程,我看到这一行 int a = (n & 8) / 8 这是为了确定从右边开始的第四位是0还是1的二进制表示。我理解比特等的概念,但我不理解这代表什么数学方程(如果有的话) 有人愿意解释一下这是如何写在数学方程式中的吗?此外,请让我知道,如果我错过了任何其他在我的理解这一行。谢谢。十进制的8是二进制的1000 所以如果你用任何数字 n & 8 仅当第4位为1且 如果再除以8,则返回1,否则返回0 例如 对于9(1001) 会是

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

我正在通过一个教程,我看到这一行

int a = (n & 8) / 8
这是为了确定从右边开始的第四位是0还是1的二进制表示。我理解比特等的概念,但我不理解这代表什么数学方程(如果有的话)


有人愿意解释一下这是如何写在数学方程式中的吗?此外,请让我知道,如果我错过了任何其他在我的理解这一行。谢谢。

十进制的
8
是二进制的
1000

所以如果你用任何数字

n & 8
仅当第4位为
1

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

例如

对于
9
1001

会是

  1001
& 1000
 ------
  1000
现在,对于第四位为
0

对于
7
0111

会是

  0111
& 1000
  -----
  0000
n&8
将逻辑
掩码应用于
n
的第四位

     n: 11001010 // example value
     8: 00001000
result: 00001000
将该数字除以8,结果为最低位:

result: 00000001
将一个数字除以
2^n
将数字
n
位向右移动(与乘以
2^n
将位向左移动的方式相同)

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

  • 表达式(n&8) 用1000个二进制执行n的逻辑And

  • 这是从右边开始的第四位

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

  • 更清楚地表示为“>>3”

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

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

    逐位运算符对位工作并执行逐位操作。假设
    a=60
    ;和
    b=13
    ;现在,以二进制格式,它们将如下所示:

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

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

    您需要了解
    &
    是“按位AND”的,并对数字的二进制表示进行操作。谷歌“按位和”,你应该找到一些好的材料。此外,一旦隔离了“8”位,将结果除以8将该位下移到“1”位置。把它写在纸上,和+1一样。谢谢你,彼得。
    result: 00000001
    
      (n AND 1000 )  >> 3
    
    a = 0011 1100
    b = 0000 1101
    a&b=0000 1100