你好我是在C#中使用字节的新手。
假设我想根据表单0xxxxxxx和1xxxxxxx比较字节。我如何获得我的比较的第一个值,同时从前面删除它?
非常感谢任何帮助。
答案 0 :(得分:1)
不确定我理解,但在C#中,要编写binaray数字1000'0000,您必须使用十六进制表示法。因此,要检查两个字节的最左侧(最重要)位是否匹配,您可以执行此操作。
byte a = ...;
byte b = ...;
if ((a & 0x80) == (b & 0x80))
{
// match
}
else
{
// opposite
}
这使用逐位AND。要清除最重要的位,您可以使用:
byte aModified = (byte)(a & 0x7f);
或者如果您想再次分配回a
:
a &= 0x7f;
答案 1 :(得分:0)
您需要使用
等二进制操作a&10000
a<<1
答案 2 :(得分:0)
这将检查两个字节并比较每个位。如果该位相同,它将清除该位。
static void Main(string[] args)
{
byte byte1 = 255;
byte byte2 = 255;
for (var i = 0; i <= 7; i++)
{
if ((byte1 & (1 << i)) == (byte2 & (1 << i)))
{
// position i in byte1 is the same as position i in byte2
// clear bit that is the same in both numbers
ClearBit(ref byte1, i);
ClearBit(ref byte2, i);
}
else
{
// if not the same.. do something here
}
Console.WriteLine(Convert.ToString(byte1, 2).PadLeft(8, '0'));
}
Console.ReadKey();
}
private static void ClearBit(ref byte value, int position)
{
value = (byte)(value & ~(1 << position));
}
}