C# 什么意思&;0x40和<&书信电报;7.
我有一个10个值(字节,十六进制)的列表。列表将转换为十进制: 09 04 5A 14 4F 7D 到 94902079125 在那之后。有一个方法(参数:C# 什么意思&;0x40和<&书信电报;7.,c#,.net,C#,.net,我有一个10个值(字节,十六进制)的列表。列表将转换为十进制: 09 04 5A 14 4F 7D 到 94902079125 在那之后。有一个方法(参数:List byteList)。有人能用这种方法给我解释一下下面的代码吗 "Test:" + ((((UInt16)byteList[(Int32)index] & 0x40) << 1) >> 7): “测试:”+((UInt16)字节列表[(Int32)索引]&0x40)>7): 特别是&0x40和>70
List byteList
)。有人能用这种方法给我解释一下下面的代码吗
"Test:" + ((((UInt16)byteList[(Int32)index] & 0x40) << 1) >> 7):
“测试:”+((UInt16)字节列表[(Int32)索引]&0x40)>7):
特别是
&0x40
和>70x40是十六进制40,即十进制的64位,或二进制的01000000位。和是按位“and”,因此{expr}&0x40
表示“只取第7位”。
是右移。因此:
- 取第七位
- 左移1
- 右移7
- 将第7位保留在LSB位置,因此最终值将为0(如果第7位未设置)或1(如果第7位已设置)
坦率地说,只使用>6
,或者只与0进行比较会更容易。同样,在这里,转换为short
(UInt16
)也没有用
如果我想测试第7位,我会:
bool isSet = (byteList[(int)index] & 0x40) != 0;
0x40是十六进制40-十进制为64,二进制为01000000。&
是按位“and”,因此{expr}&0x40
表示“只取第7位”。
表示左移,code>
表示右移。因此:
- 取第七位
- 左移1
- 右移7
- 将第7位保留在LSB位置,因此最终值将为0(如果第7位未设置)或1(如果第7位已设置)
坦率地说,只使用>6
,或者只与0进行比较会更容易。同样,在这里,转换为short
(UInt16
)也没有用
如果我想测试第7位,我会:
bool isSet = (byteList[(int)index] & 0x40) != 0;
这是一个验证是否设置了值的第7位的测试。如果设置了位,结果将是1,如果没有设置,结果将是0。这是一个验证是否设置了值的第7位的测试。如果设置了位,结果将是1,如果没有设置,结果将是0。
是位移位。您好,谢谢您的回答。一个la第一个问题。我为什么要右移6位?用0x40我取第7位。我必须把7位带到LSB去检查它是0还是1吗?正确吗?@Stampy好的,这就是编写代码的人正在做的,是的。你不需要这样做-正如我的最后一行所示。嗨,Marc。谢谢你的回答。最后一个问题。我为什么要右移6?对于0x40,我取第7位。我是否必须将7位带到LSB以检查它是0还是1?是否正确?@Stampy好的,这就是编写代码的人正在做的,是的。不过,你不需要这样做-如我的最后一行所示。