1. ホーム
  2. java

[解決済み] (number & 1) == 0 "というブール値の意味は何ですか?

2023-07-13 10:28:08

質問

CodeReviewについて 私はコードの作業ピースを投稿し、それを改善するためのヒントを求めました。私が得た 1 つは、ArrayList が偶数のインデックスを持つかどうかをチェックするためにブール型メソッドを使用することでした (これは必須です)。これは提案されたコードでした。

private static boolean isEven(int number)
{
    return (number & 1) == 0;
}

私はすでにその特定のユーザーに多くの助けを求めたので、私はSOコミュニティに助けを求める時だと決めました! 私はこれがどのように動作するかを本当に理解していません。メソッドが呼び出され、パラメータとしてArrayListのサイズを取ります(すなわち、ArrayListは10個の要素を持ち、number = 10です)。

私は、単一の & が number と 1 の両方の比較を実行することは知っていますが、その後が分からなくなりました。

読み方としては、もし number == 01 == 0 . 私は前者が真実でないことを知っているし、後者は明らかに意味をなさない。誰か私を助けてもらえますか?

編集:誰かが疑問に思っている場合に備えて、コードが動作することを追加する必要があります。

どのように解決するのですか?

"&" がビット演算であることに留意してください。 あなたはおそらくこのことに気づいているでしょうが、質問の仕方からすると、私にはまったくわかりません。

とはいえ、理論的には、ある int があり、それは 1 と 0 の連続によってビットで表現することができます。 たとえば

...10110110

2進数では、基本が2なので、ビット版の数値が0で終わるときは必ず偶数で、1で終わるときは奇数です。

よって、上記に対して1とのビット単位の&を行うと、以下のようになります。

...10110110 & ...00000001

もちろん、これは0なので、元の入力は偶数だったと言えます。

あるいは、奇数について考えてみましょう。 例えば、上で持っていたものに1を足してみましょう。 すると

...10110111 & ...00000001

は1に等しく、したがって0には等しくない。 ほらね。