C#面试问题

本文关键字:问题 面试 | 更新日期: 2023-09-27 17:58:48

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

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

C#面试问题

每个字节有8个位,它们要么是on(1),要么是off(0)。因此,您需要使用逐位运算符打开指定的位。

用72(01001000)进行ORing怎么样?

myFlag  = myFlag | 72;

假设我的解释是正确的,那么您希望使用位运算符来解决问题。为了确保特定位处于打开状态,请使用|和您想要设置的位集。

myFlag = myFlag | 0b00010010

或者相当于

myFlag |= 18

如果查看字节字符串有帮助,那么您可以使用Convert类将整数转换为位字符串,并反转以帮助可视化按位OR的效果。下面是一个创建toggedOnFlag的示例,它打开了位。您可以与其他位字符串进行OR运算以关闭它们。

var toggleBitsOn  = "01001000";
var toggleBitsOff = "10110111";
var toggle = Convert.ToInt32(toggleBitsOn, 2);
var toggledOnFlag = myFlag | toggle;
Console.WriteLine(Convert.ToString(toggledOnFlag, 2));

您没有指定如何声明"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#的清晰度而更新,并使用了"标志"属性,这可能更符合面试官想要的内容。