我有一个包含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
答案 0 :(得分:9)
0x40是十六进制40 - 也就是十进制的64,或二进制的01000000。 &
是按位&#34;和&#34;,所以{expr} & 0x40
表示&#34;只取第7位&#34;。 <<
左移,>>
右移。所以这个:
>> 6
或仅与0进行比较会更容易。同样,转换为short
(UInt16
)在这里没用。
如果我想测试第7位,我就会完成:
bool isSet = (byteList[(int)index] & 0x40) != 0;
答案 1 :(得分:2)
这是验证是否设置了第7位值的测试。如果设置了位,结果将为1,否则为0。