C#面试问题

时间:2011-06-10 15:29:24

标签: c#

在其中一次采访中,我被问到以下问题,但我不确定是什么,请帮助我理解这个问题

使用C#转换所述字节myFlag的第4和第7位,其中写入最多位为第一位。

5 个答案:

答案 0 :(得分:2)

每个字节有8位,分别为(1)或关闭(0)。因此,您需要使用按位运算符打开指定的位。

答案 1 :(得分:1)

ORing与72(01001000)怎么样?

myFlag  = myFlag | 72;

答案 2 :(得分:1)

假设我的解释是正确的,您希望使用逐位运算符来解决问题。为了确保特定位正在使用|,并设置了您想要设置的位。

myFlag = myFlag | 0b00010010

或等效

myFlag |= 18

答案 3 :(得分:1)

您没有指定如何声明“myFlag”,但这应该是您正在寻找的。

[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));