在其中一次采访中,我被问到以下问题,但我不确定是什么,请帮助我理解这个问题
使用C#转换所述字节myFlag的第4和第7位,其中写入最多位为第一位。
答案 0 :(得分:2)
每个字节有8位,分别为(1)或关闭(0)。因此,您需要使用按位运算符打开指定的位。
答案 1 :(得分:1)
ORing与72(01001000)怎么样?
myFlag = myFlag | 72;
答案 2 :(得分:1)
假设我的解释是正确的,您希望使用逐位运算符来解决问题。为了确保特定位正在使用|
,并设置了您想要设置的位。
myFlag = myFlag | 0b00010010
或等效
myFlag |= 18
答案 3 :(得分:1)
您没有指定如何声明“myFlag”,但这应该是您正在寻找的。 p>
[Flags]
enum BitFlags : byte
{
One = ( 1 << 0 ),
Two = ( 1 << 1 ),
Three = ( 1 << 2 ),
Four = ( 1 << 3 ),
Five = ( 1 << 4 ),
Six = ( 1 << 5 ),
Seven = ( 1 << 6 ),
Eight = ( 1 << 7 )
}
static void Main(string[] args)
{
BitFlags myFlag = BitFlags.Four | BitFlags.Seven;
Console.WriteLine( Convert.ToString( ( byte ) myFlag, 2 ) );
}
编辑:针对C#清晰度进行了更新并使用了“Flags”属性,这可能更像是采访者所寻找的内容。
答案 4 :(得分:1)
如果查看字节串有帮助,那么可以使用Convert类将整数转换为位串并反转以帮助可视化按位OR的效果。下面是一个创建 toggledOnFlag 的示例,其中包含切换的位。您可以使用其他位字符串进行OR来关闭它们。
var toggleBitsOn = "01001000";
var toggleBitsOff = "10110111";
var toggle = Convert.ToInt32(toggleBitsOn, 2);
var toggledOnFlag = myFlag | toggle;
Console.WriteLine(Convert.ToString(toggledOnFlag, 2));