【发布时间】:2013-02-21 14:54:05
【问题描述】:
在所有按位示例中,我看到值呈指数增长(1、2、4、8 等)。但是,在下面的枚举中,我使用 1、2、3、4(如果你愿意,请原谅 VB):
<Flags()>
Enum BitWiseTest
One = 1
Two = 2
Three = 3
Four = 4
End Enum
令我惊讶的是,以下代码有效:
Dim TestBits As BitWiseTest
TestBits = TestBits Or BitWiseTest.One
TestBits = TestBits Or BitWiseTest.Two
TestBits = TestBits Or BitWiseTest.Three
TestBits = TestBits Or BitWiseTest.Four
Dim BitToRemove As BitWiseTest
BitToRemove = BitWiseTest.Two
TestBits = Not BitToRemove
Console.WriteLine(TestBits And BitToRemove)
注释掉TestBits = Not BitToRemove 行会告诉你,不删除该位会告诉你它仍然存在。将 BitToRemove = BitWiseTest.Two 更改为使用另一个枚举值将表明它也适用于其他位。
它似乎工作得完美无缺,那么我在各处看到的关于按位的值的指数递增是怎么回事?
【问题讨论】:
-
您是否检查过如果同时设置
One和Two会发生什么?或者当您设置Three并取消设置One时? -
啊,设置三和取消设置一破坏了它!我今天用 bitwise 学到了一些东西。
标签: .net bit-manipulation bitwise-operators