-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 回答