Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么意思&;0x40和<&书信电报;7._C#_.net - Fatal编程技术网

C# 什么意思&;0x40和<&书信电报;7.

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

我有一个10个值(字节,十六进制)的列表。列表将转换为十进制:

09 04 5A 14 4F 7D

94902079125

在那之后。有一个方法(参数:
List byteList
)。有人能用这种方法给我解释一下下面的代码吗

"Test:" + ((((UInt16)byteList[(Int32)index] & 0x40) << 1) >> 7):
“测试:”+((UInt16)字节列表[(Int32)索引]&0x40)>7):

特别是
&0x40
>7

0x40是十六进制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好的,这就是编写代码的人正在做的,是的。不过,你不需要这样做-如我的最后一行所示。