什么意思和& 0x40和<< 7

时间:2014-06-25 08:37:57

标签: c# .net

我有一个包含10个值(字节,十六进制)的列表。该列表将转换为十进制:

  

09 04 5A 14 4F 7D

  

9 4 90 20 79 125

之后。有一个方法(参数:List<Byte> byteList)。任何人都可以用这种方法解释下面的代码:

"Test:" + ((((UInt16)byteList[(Int32)index] & 0x40) << 1) >> 7):

特别是& 0x40<< 1以及>> 7

2 个答案:

答案 0 :(得分:9)

0x40是十六进制40 - 也就是十进制的64,或二进制的01000000。 &是按位&#34;和&#34;,所以{expr} & 0x40表示&#34;只取第7位&#34;。 <<左移,>>右移。所以这个:

  • 取第7位
  • 左移1
  • 右移7
  • 将第7位保留在LSB位置,因此最终值将为0(如果第7位未设置)或1(如果第7位已设置)
坦率地说,仅仅>> 6或仅与0进行比较会更容易。同样,转换为shortUInt16)在这里没用。

如果我想测试第7位,我就会完成:

bool isSet = (byteList[(int)index] & 0x40) != 0;

答案 1 :(得分:2)

这是验证是否设置了第7位值的测试。如果设置了位,结果将为1,否则为0。