这个二进制文档是什么意思?

时间:2013-04-26 16:56:44

标签: java byte bits

我正在尝试解码某人的字节数组,而我却陷入了这个部分:

&lt state &gt ::= "01" <i>(2 bits) for A</i>
                   "10" <i>(2 bits) for B</i>
                   "11" <i>(2 bits) for C</i>

我想这要我查看下一个字节的下两位。这是否意味着字节的最小或最高位数?我想如果它意味着最不重要的话,我会丢掉最后的6位?

我发现这段代码用于查看字节的位:

for (int i = 0; i < byteArray.Length; i++)
{
   byte b = byteArray[i];
   byte mask = 0x01;
   for (int j = 0; j < 8; j++)
   {
      bool value = b & mask;
      mask << 1;
   }
}

有人可以扩展它的确切功能吗?

1 个答案:

答案 0 :(得分:1)

只是为了一个开始:

要提取字节的各个位,请使用“&amp;”,称为按位和运算符。按位和操作意味着“保留在两侧设置的所有位”。例如。当你计算按位和两个字节时,例如00000011&amp; 00000010,则结果为00000010,因为只有第二个位置的位在两侧都设置了。

在java编程语言中,同样的例子如下所示:

int a = 3;
int b = 2;
int bitwiseAndResult = a & b; // bitwiseAndResult will be equal to 2 after this

现在要检查是否设置了某个int的第n位,你可以这样做:

int intToExamine = ...;
if ((intToExamine >> n)) & 1 != 0) {
    // here we know that the n'th bit was set
}

&gt;&gt;被称为bitshift运算符。它只是将位从左向右移动,如下所示:00011010&gt;&gt; 2将得到结果00000110。

从上面你可以看到,为了提取某个值的第n位,首先将第n位移位到位置0(注意第一位是位0,而不是第1位),然后你使用bitwise和operator(&amp;)来保持那个位0。

以下是按位和位移运算符的一些简单示例: http://www.tutorialspoint.com/java/java_bitwise_operators_examples.htm