AND、OR、XOR、シフト
ビットを自信を持って読み取り、組み合わせます
「AND、OR、XOR、シフト」はCoddyKit上の無料Competitive Programming Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCompetitive Programming Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Competitive Programming Academyコースには全4レッスンが含まれています。
ビットを道具として使う
すべての整数は、実際には 0 と 1 が並んだビット列です。ビットを読み取り、組み合わせる方法を学ぶと、コンテストで高速かつ巧妙なテクニックを使えるようになります。🔧
2進数を確認する
Python の bin() を使うと、どんな数のビットも確認できます。0b という接頭辞は2進数であることを示し、その後ろがビットパターンです。
print(bin(13)) # 0b1101AND は共通するビットを残す
AND 演算子 (&) は、両方の数が 1 である位置だけ 1 を返します。共通するビットの確認やマスクに適しています。
print(6 & 3) # 0b110 & 0b011 = 0b010 = 2OR はビットを組み合わせる
OR 演算子 (|) は、どちらか一方の数が 1 である位置を 1 にします。ほかのビットを変えずにフラグをオンにする場合に使います。
print(6 | 1) # 0b110 | 0b001 = 0b111 = 7XOR は違いを見つける
XOR 演算子 (^) は、2つのビットが異なる位置で 1 を返します。トグル操作や、1つだけ異なる値を見つける処理でよく使われます。
print(6 ^ 3) # 0b110 ^ 0b011 = 0b101 = 5XOR は自分自身を打ち消す
ある数を自分自身と XOR すると必ず 0 になり、0 と XOR すると元の値がそのまま残ります。この自己相殺の性質が、多くのXORパズルに利用されています。
print(7 ^ 7) # 0
print(7 ^ 0) # 7一意の値を見つける
1つを除くすべての値が2回ずつ現れる場合、それらをすべて XOR するとペアが消えます。最後に残るのが一意の値です。
ans = 0
for x in [4, 1, 2, 1, 2]:
ans ^= x
print(ans) # 4左シフトで掛け算する
左シフトではビットを上位側へ移動し、右側に 0 を追加します。1ビット左へシフトするたびに値が2倍になり、2のべき乗を掛けるのと同じ効果があります。
print(3 << 2) # 3 * 4 = 12右シフトで割り算する
右シフトでは右端のビットを落とします。1ビット右へシフトするたびに値が半分になり、2のべき乗による整数除算を行えます。
print(20 >> 2) # 20 // 4 = 52のべき乗を作る
1 を k ビット左にシフトすると、2 の k 乗を瞬時に作れます。1つのビットだけを対象にするマスクを作る最も簡潔な方法です。
print(1 << 5) # 32コンテストでは速度が重要
ビット演算子は非常に高速な1ステップで実行されるため、算術演算をシフトに置き換えることで、ぎりぎりの制限時間を乗り切れることがあります。しっかり身につけておきましょう。⚡
確認問題
ビット演算子を試してみましょう。
まとめ:ビット演算子
これで AND、OR、XOR とシフトを学びました。ビットの結合、切り替え、拡大縮小を高速な1ステップで行えます。これらは、これから登場するすべてのビットテクニックの基礎です。🎉
よくある質問
「AND、OR、XOR、シフト」レッスンは無料ですか?
はい。「AND、OR、XOR、シフト」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Competitive Programming Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Competitive Programming Academyコースには全4レッスンが含まれています。
「AND、OR、XOR、シフト」で何を学びますか?
ビットを自信を持って読み取り、組み合わせます ブラウザで直接実行するハンズオンコードでCompetitive Programming Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Competitive Programming Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCompetitive Programming Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「AND、OR、XOR、シフト」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCompetitive Programming Academyレッスンでコードを書いて実行できますか?
はい。すべてのCompetitive Programming Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- AND、OR、XOR、シフト
- ビットの Set、Clear、Toggle
- ビット数と最下位の Set Bit
- 小さな集合としてのビットマスク