【问题标题】:What does this binary documentation mean?这个二进制文档是什么意思?
【发布时间】:2013-04-27 02:00:48
【问题描述】:

我正在尝试解码某人的字节数组,但我被困在这部分:

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

我认为这希望我查看下一个字节的下 2 位。这是否意味着字节的最低或最高有效数字?我想我会扔掉最后 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;
   }
}

有人可以详细说明这到底是做什么的吗?

【问题讨论】:

  • "掩码
  • bool value = b &amp; mask; 什么都不做,因为 value 的作用域是 for 块并且从未使用过。应该显示编译时警告...

标签: java byte bits


【解决方案1】:

只是给你一个开始:

要提取字节的各个位,请使用“&”,称为按位与运算符。按位与运算的意思是“保留两侧设置的所有位”。例如。当您计算两个字节的按位与时,例如00000011 & 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
}

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

所以从上面你可以看到,为了提取某个值的第 n 位,你首先将第 n 位移动到位置 0(注意第一位是第 0 位,而不是第 1 位),然后您使用按位和运算符 (&) 仅保留该位 0。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 2014-02-23
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    相关资源
    最近更新 更多