0Pricing
Competitive Programming Academy · レッスン

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))  # 0b1101

AND は共通するビットを残す

AND 演算子 (&) は、両方の数が 1 である位置だけ 1 を返します。共通するビットの確認やマスクに適しています。

print(6 & 3)  # 0b110 & 0b011 = 0b010 = 2

OR はビットを組み合わせる

OR 演算子 (|) は、どちらか一方の数が 1 である位置を 1 にします。ほかのビットを変えずにフラグをオンにする場合に使います。

print(6 | 1)  # 0b110 | 0b001 = 0b111 = 7

XOR は違いを見つける

XOR 演算子 (^) は、2つのビットが異なる位置で 1 を返します。トグル操作や、1つだけ異なる値を見つける処理でよく使われます。

print(6 ^ 3)  # 0b110 ^ 0b011 = 0b101 = 5

XOR は自分自身を打ち消す

ある数を自分自身と 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 = 5

2のべき乗を作る

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. AND、OR、XOR、シフト
  2. ビットの Set、Clear、Toggle
  3. ビット数と最下位の Set Bit
  4. 小さな集合としてのビットマスク
← Competitive Programming Academyに戻る