web-dev-qa-db-ja.com

intに特定のビットを設定する

可能な各データベース値のint値に特定のビットを設定して、データベースから読み取った特定の文字列値をマスクする必要があります。たとえば、データベースが文字列「value1」を返す場合、位置0のビットを1に設定する必要がありますが、データベースが「value2」を返す場合、位置1のビットを代わりに1に設定する必要があります。

Intの各ビットが最初に0に設定されていることを確認してから、指定されたビットだけをオンにするにはどうすればよいですか?

15

Int値 "intValue"があり、特定のビットを位置 "bitPosition"に設定する場合は、次のようにします。

_intValue = intValue | (1 << bitPosition);
_

以下:

_intValue |= 1 << bitPosition;
_


ビットをリセットする(つまり、ゼロに設定する)場合は、次のようにします。

_intValue &= ~(1 << bitPosition);
_

(演算子_~_は、値の各ビットを逆にします。したがって、~(1 << bitPosition)intになります。ここで、ビットを除くすべてのビットは1です。指定されたbitPositionで。)

36
user2819245

すべてを0に設定し、値に0x00000000を設定するには:

int startValue = initialValue & 0x00000000;
//Or much easier :)
int startValue = 0;

次にビットを設定するには、何の番号があるかを判断する必要がありますそのビットのみセットおよびORそれ。たとえば、最後のビットを設定するには:

int finalValue = startValue | 0x00000001;

@Magusが指摘するように、少し設定を解除するには、正反対を行います。

int finalValue = startValue & 0xFFFFFFFE;
//Or
int finalValue = startValue & ~(0x00000001);

〜演算子はbitwise notであり、すべてのビットを反転します。

6
BradleyDotNET