ビット単位/シフト操作を学習しようとしています。
以下のプログラムに出くわしましたが、以下のプログラムの AND 条件部分 (checker & (1 << val) を理解していません。最終的な値が 0 より大きいのはいつですか?誰かがそこで何が起こっているのか説明してもらえますか?
入力例: xyzz
出力例:
8388608値 0チェッカー 0最終値
16777216Value 8388608checker 0最終値
33554432Value 25165824checker 0最終値
33554432値 58720256チェッカー 33554432最終値
public static boolean isUniqueChars(String str) {
int checker = 0;
for (int i = 0; i < str.length(); i++) {
int val = str.charAt(i) - 'a';
System.out.println((1 << val) + "Value");
System.out.println((checker) + "checker");
System.out.println(((checker & (1 << val))) + "final value\n");
if ((checker & (1 << val)) > 0) {
return false;
} else {
checker = checker | (1 << val);
}
}
return true;
}
}