获得2个最重要的位

时间:2015-02-12 18:20:59

标签: c#

如何在C#中获取字节的2个最高有效位。

我有类似的东西(值>> 6)& 7,但我不确定这是否正确。

01 011100只想以粗体返回部分。

2 个答案:

答案 0 :(得分:1)

如果你想要两位,那么你需要and乘3(二进制11),而不是7(二进制111)。 因此,如果valuebyte,则类似于:

byte twobits = (byte)((value >> 6) & 3);

然而,正如评论所述,这是多余的。通过右移6就足够了(因为其他位已经是0)。

只是为了好玩,如果你想拥有任何数据类型的两个最重要的位,你可以拥有:

byte twobits = (byte)(value >> (System.Runtime.InteropServices.Marshal.SizeOf(value)*8-2));

正如警告一样,Marshal.SizeOf在编组后给出了变量类型的字节大小,但它通常是"的工作原理。

答案 1 :(得分:0)

如果我正确地读了你的问题,你希望将另一个字节中一个字节的两个最高有效位作为最低有效位,其他位设置为零。

在这种情况下,您可以返回myByte >> 6,因为它将用零填充其余位(至少在C#中)。 & 7操作似乎是多余的,7的布局是00000111。这意味着您要确保结果字节中最左边的5位设置为零...您可能打算确保最左边的6位为零,在这种情况下它应该是3

如果您只想返回最左边的两位并保持原位,那么您应该返回myByte & 0b11000000