什么意思&0x40 and <<7.

本文关键字:and 0x40 意思 什么 | 更新日期: 2023-09-27 18:10:22

我有一个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

什么意思&0x40 and <<7.

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

  • 占用第7位
  • 左移1
  • 右移7
  • 将第7位留在LSB位置,因此最终值将为0(如果第7位未设置)或1(如果第7位已设置)
坦率地说,只使用>> 6或者只与0比较会更容易。同样,转换为short (UInt16)在这里也没有用。

如果我想测试第7位,我只需要做:

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

这是一个验证是否设置了第7位值的测试。如果设置了bit,结果为1,如果没有设置,结果为0。