2016-05-08 1 views
1

私は数値フィールドにブール値のデータを保存してデータベースを簡素化しようとしていますが、今はこれをやってビットをオン/オフしています。javaの整数ビットをオフにする簡単な方法はありますか?

int turnBit(int input, int bit, boolean value){ 
    if(value){ 
     input = input | (1<<bit); 
    }else{ 
     input = input | (1<<bit); 
     input = input^(1<<bit); 
    } 
    return input; 
} 

これをオンにする前にビットをオフにする方法はありますか?

+2

これは、フィールド数を減らすことによってデータベーススキーマを簡略化できます。クエリ・オプティマイザが最適化するのが難しくなります。 –

+0

この新しいフィールドにはユーザーの一部のパラメータしか保持されていないため、クエリする必要はありません。私はmysqlを使用しているので、個々のパラメータを保存するためにtinyIntの代わりに単一の整数を使用すると、ハードドライブのスペースとブロードバンドを節約できます。 –

+0

クエリーを行う必要はありません:〜まで –

答えて

2

あなたはビットをオンにするビット単位の「または」演算子を使用していて、これが正しいです:

0001 | 0010 results in 0011 

あなたはビットをオフにするビット単位の「と」機能を使用することができます。

1101 & 1110 results in 1100 

値の1ビットをオフにするには、気にしないビットをすべて1に設定し、オフにしたいビットを0に設定する 'ビットマスク'を作成します。その値のビットを「オフ」にします。

特定のビットをオンにするためのマスクがある場合、つまり変更したくない各位置に0があり、変更したい位置に1がある場合は、それをJavaのbitwise 'not'演算子(〜)を使用してビットマスクをオフにします。つまり、〜0010の結果は1101になります。

3
input = input & ~(1 << bit) 
関連する問題