如何在C#中获取字节的2个最高有效位。
我有类似的东西(值>> 6)& 7,但我不确定这是否正确。
01 011100只想以粗体返回部分。
答案 0 :(得分:1)
如果你想要两位,那么你需要and
乘3(二进制11
),而不是7(二进制111
)。
因此,如果value
是byte
,则类似于:
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
。