ビット操作
こんにちは!タカモリです。今回はビット操作について勉強していきます。
例えば今あるビットの数値を反転したり、日梅雨な部分のみを取り出す操作を行うことがあると思います。
例えばコンピュータは足し算しか本来できないですが、引き算をする為にはその数を2の補数で表す必要があったかと思います。2の補数にする為には全ビットを反転させて1 を足すのでしたね!
今の例のように現在表しているビットを操作する方法について学習していきたいと思います。と言っても実はこれもこれまでに学習した論理演算でできるのです。
ビットを反転させる
先程の例にあった2の補数表現についてみていきます。 例えば00000111という8ビットの2進数を補数表現にしたい場合には11111111や00001111など操作したい箇所に1を対応させて排他的論理和で演算を行うことで、1を当てた箇所が反転します。 これは排他的論理和のどちらかの入力が1なら1を返すというものを利用したビット操作です。
排他的論理和 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
---|---|---|---|---|---|---|---|---|
1を当てると | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
結果 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
マスクする
先ほどは排他的論理和を利用したビット操作でしたが、他の回路を利用してビットを操作することももちろんできます。続いては論理積回路を使ったビット操作です。
論理積 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
1を当てると | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
結果 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
論理積回路を当てることで、1を当てたビット以外を全て0にすることができます。この操作をマスクと言います。
今回はわかりやすかったのではないでしょうか!この他にもビット操作はあるので興味のある方は是非調べてみてくださいね!
もえもえさん
排他的論理和は同じ変数同士で実行すると変数の全てのビットをゼロにできるので初期化に使ったりしますね。 あと、どこかで出てたらすみませんが掛け算(2のn乗)、割り算(2のn乗分の1)はビットを左右にシフトさせますね。 これは基本情報処理でも出てくるかと思います。
タカモリ
なるほどわからん!笑めっちゃ勉強なります! 全然意識したことがないので、理解してやっていきたいと思っております!
退会ユーザー
マスク処理は、プログラミングでも使ったりしますね。 身近なのは、サブネットマスクです。 マスク処理で、IPアドレスのネットワークアドレス部と、ホストアドレス部を分けます。 その他には、ファイルパーミッション。 読込は、4(0b0100) 書込は、2(0b0010) 実行は、1(0b0001)ですね。 例えば、ファイルパーミッションとして、 6(0b0110)が設定されている場合は、 6(0b0110)∧ 4(0b0100)= 0b0100 になって、読込権限あり 6(0b0110)∧ 2(0b0010)= 0b0010 になって、書込権限あり 6(0b0110)∧ 1(0b0001)= 0b0000 になって、実行権限なし マスク処理は、プログラミングでも使うテクニックなので、 覚えといてくださいね。 ※0bxxxxは2進数を示す。