2011-06-10 58 views
-1

在采访中的一个,我拿到提出以下问题,但我不知道那是什么,请帮助我了解有关的问题C#面试问题

使用C#打开一个4和第7位表示写入最高位为第一位的字节myFlag。

+2

最右边,不是“最写”,也许? – MPelletier 2011-06-10 15:30:35

+2

“使用C#,使用C#的最高有效位是第一位的约定,打开名为myFlag的”byte“的第4和第7位”看起来是个问题。 – Guvante 2011-06-10 15:33:57

+0

如果你甚至没有试图用体面的英语来提出一个体面的问题,并且提供体面和足够的细节让我们理解你想要达到的目标,你如何期待我们能够帮助你? – RobinJ 2011-06-10 15:35:41

回答

2

每个字节都有8位,它们在(1)或关闭(0)上。所以你想打开指定的位,使用按位运算符。

1

怎么样与72(01001000)ORing?

myFlag = myFlag | 72; 
+1

这将返回正确的值,但不会修改标志。 'myFlag = myFlag | 72;'也许是面试官想要的。 – mah 2011-06-10 15:35:47

+0

@mah你是对的。 – 2011-06-10 15:37:57

+0

甚至可以缩短到'myFlag | = 72;' – 2011-06-10 15:45:21

1

假设我的解释是正确的,你正在寻找使用按位运算符来解决问题。为了确保使用|的特定位与要设置的位进行设置。

myFlag = myFlag | 0b00010010 

或等价

myFlag |= 18 
+0

如果“最右边”位是第一位,第四和第七位是不是0b01001000(十进制值72)? – user79878 2011-06-10 16:04:57

+0

@ user79878:我假设他们使用的是最重要的比特约定是第一比特。 – Guvante 2011-06-10 20:31:27

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”属性,这可能是沿着什么样的面试官在寻找线条更。

+0

谢谢您的回复... – Mahendran 2011-06-10 17:53:23

1

如果有助于查看字节串,那么可以使用Convert类将整数转换为位串并反转以帮助可视化按位或的效果。以下是创建一个触发的标志的示例,该触发的位已打开。你可以用另一个位串来关闭它们。

var toggleBitsOn = "01001000"; 
var toggleBitsOff = "10110111"; 
var toggle = Convert.ToInt32(toggleBitsOn, 2); 

var toggledOnFlag = myFlag | toggle; 
Console.WriteLine(Convert.ToString(toggledOnFlag, 2));