有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

&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;
   }
}

有人能详细说明这到底是做什么的吗


共 (1) 个答案

  1. # 1 楼答案

    给你一个开始:

    要提取字节的各个位,可以使用“&;”,调用按位and运算符。按位and操作意味着“保留两侧设置的所有位”。例如,当计算两个字节的按位and时,例如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
    }
    

    这个>>;被称为位移位运算符。它只是将位从左向右移位,如下所示:0001010>>;2将产生00000110的结果

    因此,从上面可以看出,要提取某个值的第n位,首先将第n位移到位置0(请注意,第一位是位0,而不是位1),然后使用按位and运算符(&;)只保留那一点0

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