C# 如何将特定的二进制位设置为 0 或 1?
C# How do I set specific binary bit to 0 or 1?
我有四个复选框链接到 0x00 和 0x0F 之间的十六进制值,因此如果您输入 0x0B,即 1011,复选框将被选中,而不是选中,选中,选中。为此,我使用了:
if ((controlByte.Item2 & 0x01) == 0x01)
{
control1 = true;
}
if ((controlByte.Item2 & 0x02) == 0x02)
{
control2 = true;
}
if ((controlByte.Item2 & 0x04) == 0x04)
{
control3 = true;
}
if ((controlByte.Item2 & 0x08) == 0x08)
{
control4 = true;
}
接下来我希望它转向另一个方向,因此当您单击复选框时,十六进制值将会改变。
如果我有当前值 0x0B (1011) 并单击我想要的第一个框 return 0x0A (1010)。我的函数将遍历每个复选框并更新十六进制值。我目前的尝试是这样的:
if (checkbox1)
{
controlbyte = (byte)(controlbyte | 0x01);
}
else
{
controlbyte = (byte)(controlbyte ^ 0x01);
}
看起来这会切换它,但是当我 运行 通过所有复选框时它会切换我没有点击的复选框。有没有更好的方法来获取 0x0B (1011) 并将其中一个位设置为 0 或 1?
( 1 << flag ) <--- change like this;
if ((controlByte.Item2 & (1 << flag)) == (1 << flag))
{
control[flag] = true;
}
//0x01 == 1 << 1;
//0x02 == 1 << 2;
//0x04 == 1 << 3;
//0x08 == 1 << 4;
//because it same like this:
if ((controlByte.Item2 & (1 << 1)) == (1 << 1))
{
control1 = true;
}
if ((controlByte.Item2 & (1 << 2)) == (1 << 2))
{
control2 = true;
}
if ((controlByte.Item2 & (1 << 3)) == (1 << 3))
{
control3 = true;
}
...
controlbyte = (byte)(controlbyte | (1 << 1));
controlbyte = (byte)(controlbyte ^ (1 << 1));
我有四个复选框链接到 0x00 和 0x0F 之间的十六进制值,因此如果您输入 0x0B,即 1011,复选框将被选中,而不是选中,选中,选中。为此,我使用了:
if ((controlByte.Item2 & 0x01) == 0x01)
{
control1 = true;
}
if ((controlByte.Item2 & 0x02) == 0x02)
{
control2 = true;
}
if ((controlByte.Item2 & 0x04) == 0x04)
{
control3 = true;
}
if ((controlByte.Item2 & 0x08) == 0x08)
{
control4 = true;
}
接下来我希望它转向另一个方向,因此当您单击复选框时,十六进制值将会改变。
如果我有当前值 0x0B (1011) 并单击我想要的第一个框 return 0x0A (1010)。我的函数将遍历每个复选框并更新十六进制值。我目前的尝试是这样的:
if (checkbox1)
{
controlbyte = (byte)(controlbyte | 0x01);
}
else
{
controlbyte = (byte)(controlbyte ^ 0x01);
}
看起来这会切换它,但是当我 运行 通过所有复选框时它会切换我没有点击的复选框。有没有更好的方法来获取 0x0B (1011) 并将其中一个位设置为 0 或 1?
( 1 << flag ) <--- change like this;
if ((controlByte.Item2 & (1 << flag)) == (1 << flag))
{
control[flag] = true;
}
//0x01 == 1 << 1;
//0x02 == 1 << 2;
//0x04 == 1 << 3;
//0x08 == 1 << 4;
//because it same like this:
if ((controlByte.Item2 & (1 << 1)) == (1 << 1))
{
control1 = true;
}
if ((controlByte.Item2 & (1 << 2)) == (1 << 2))
{
control2 = true;
}
if ((controlByte.Item2 & (1 << 3)) == (1 << 3))
{
control3 = true;
}
...
controlbyte = (byte)(controlbyte | (1 << 1));
controlbyte = (byte)(controlbyte ^ (1 << 1));