0Pricing
Competitive Programming Academy · レッスン

ビットの Set、Clear、Toggle

マスクで 1 ビットを編集します

「ビットの Set、Clear、Toggle」はCoddyKit上の無料Competitive Programming Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCompetitive Programming Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Competitive Programming Academyコースには全4レッスンが含まれています。

1ビットずつ編集する

ほかのビットに触れずに、1つのビットだけを変更したいことがあります。そのコツは、目的のビットだけを正確に対象にするマスクを作ることです。🎯

1ビットだけのマスクを作る

対象の位置まで 1 をシフトすると、1ビットだけがオンになったマスクを作れます。位置 0 は最も右側のビットです。

mask = 1 << 3  # 0b1000, targets bit 3

OR でビットをセットする

ビットをオンにするには、数値とマスクの OR を取ります。OR は対象の位置を 1 にし、それ以外のビットはそのままにします。これをビットのセットと呼びます。

n = 0b0001
n |= (1 << 2)  # 0b0101

設定は冪等です

ビットがすでに1なら、もう一度セットしても何も変わりません。マスクとのORは繰り返し適用しても安全なので、ループ内でも信頼して使えます。👍

反転マスク

ビットをクリアするには、その位置だけがOFFで、その他がすべてONのマスクが必要です。NOT演算子(~)を使うと、単純なマスクのすべてのビットが反転します。

clear = ~(1 << 2)  # ...11111011

ANDでビットをクリアする

数値と反転マスクのANDを取り、対象のビットを0にしながら、それ以外を保持します。これが1つのビットをクリアする方法です。

n = 0b0111
n &= ~(1 << 1)  # 0b0101

XORでビットを反転する

1ビットのマスクとXORを取ると、その位置が反転します。0は1に、1は0になります。このトグルは、3つの方法の中で最もすっきりした1行の処理です。

n = 0b0101
n ^= (1 << 0)  # 0b0100

ビットがオンか確認する

数値と1ビットのマスクのANDを取ります。結果が0以外なら、そのビットはセットされています。0なら、ビットはオフです。

n = 0b0100
on = (n & (1 << 2)) != 0  # True

ビットを0または1として読み取る

数値を右にシフトして対象のビットを最下位に移動し、その後1とのANDを取ります。これにより、0または1のビット値を正確に取得できます。

n = 0b1010
bit = (n >> 1) & 1  # 1

ビット編集が重要な理由

セット、クリア、トグルを使うと、1つの整数の中にオンまたはオフのフラグを多数格納できます。これが、コンテストで使われるコンパクトなビットマスク状態の基本です。

オフバイワンに注意する

ビット位置は0から始まるため、ビットkは1をkだけ左にシフトした値にあります。インデックスを取り違えることが、ここで初心者が最もよく起こすバグです。

確認問題

ビットをクリアするには、どの操作を選べばよいでしょうか。

復習: セット、クリア、トグル

ORはセット、NOTとのANDはクリア、XORは1つのビットのトグルを行います。この3種類のマスクを身につければ、好きなビットを自在に操作できます。🎉

よくある質問

「ビットの Set、Clear、Toggle」レッスンは無料ですか?

はい。「ビットの Set、Clear、Toggle」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Competitive Programming Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Competitive Programming Academyコースには全4レッスンが含まれています。

「ビットの Set、Clear、Toggle」で何を学びますか?

マスクで 1 ビットを編集します ブラウザで直接実行するハンズオンコードでCompetitive Programming Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Competitive Programming Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCompetitive Programming Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「ビットの Set、Clear、Toggle」レッスンにはどのくらい時間がかかりますか?

ほとんどの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に戻る