我有一个包含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。 &
是按位“与”,因此{expr} & 0x40
的意思是“仅取第7位”。 <<
是左移,而>>
是右移。所以这:
需要第七位
左移1
右移7
将第7位保留在LSB位置,因此最终值将为0(如果未设置第7位)或1(如果设置了第7位)
坦白说,将>> 6
或与0比较会更容易。同样,强制转换为short
(UInt16
)在这里没有用。
如果我想测试第7位,我会做:
bool isSet = (byteList[(int)index] & 0x40) != 0;