什么意思&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是十六进制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。