在int中设置特定位

Mic*_*ill 12 c# bit-manipulation

我需要通过为每个可能的数据库值设置int值中的特定位来屏蔽从数据库读取的某些字符串值.例如,如果数据库返回字符串"value1",则位置0中的位需要设置为1,但如果数据库返回"value2",则位置1中的位需要设置为1.

如何确保int的每个位最初设置为0然后再打开指定的位?

小智 37

如果你有一个int值" intValue "并且你想在位置" bitPosition " 设置一个特定位,那么执行以下操作:

intValue = intValue | (1 << bitPosition);
Run Code Online (Sandbox Code Playgroud)

或更短:

intValue |= 1 << bitPosition;
Run Code Online (Sandbox Code Playgroud)


如果要重置某个位(即将其设置为零),可以执行以下操作:

intValue &= ~(1 << bitPosition);
Run Code Online (Sandbox Code Playgroud)

(运算符~将一个值中的每个位反转,因此~(1 << bitPosition)将产生一个int,其中除了给定bitPosition的位之外,每个位都为1.)


Bra*_*NET 6

要将所有内容设置为0,将值设置为0x00000000:

int startValue = initialValue & 0x00000000;
//Or much easier :)
int startValue = 0;
Run Code Online (Sandbox Code Playgroud)

要设置该位,您必须确定该位设置的数字和OR.例如,要设置最后一位:

int finalValue = startValue | 0x00000001;
Run Code Online (Sandbox Code Playgroud)

正如@Magus指出的那样,为了取消设置,你会做出完全相反的事情:

int finalValue = startValue & 0xFFFFFFFE;
//Or
int finalValue = startValue & ~(0x00000001);
Run Code Online (Sandbox Code Playgroud)

〜操作符是按位而不是翻转每一位.