-1

intデータベース操作の結果を追跡するためにフラグを使用していますが、ビットの反転について質問がありました。これらのビットを切り替えるメソッドにフラグ (またはいくつかのフラグ) を渡すことができるようにしたいと考えています。これは私が現在使用している方法です(flagは現在のフラグです):

private void toggleFlags(int flags) {
    flag = (flag & (flag | (~flag))) ^ flags;
}

それは私にはうまくいくように見えますが、それが本来あるべきことをしていることを確認したいだけです。誰でも私のためにこれを確認できますか?

4

1 に答える 1

2

私の見方では、あなたのコードはこれを実行するのと同じです:

flag = flag ^ flags;

これは、必要な特定のフラグを切り替えるのに十分な単純な XOR 操作です。

なぜこのように簡単なのかというと(flag | (~flag))、バイナリ 1 の束が得られるだけで(flag & <a bunch of binary 1s>)、もちろん と同じだからflagです。だから、その声明が残っているのは本当にflag = flag ^ flags

于 2013-09-24T23:27:24.250 に答える