SE基本情報に出るIT用語

8ビットの値の全ビットを反転する方法は?

8ビットの値の全ビットを反転する方法(操作)は、16進表記 FF のビット列と排他的論理和をとることです。

ためしに01010101の8ビットを適当に作って、16進数のFF=10進数の255=2進数の11111111と、排他的論理和をとると。

01010101(→もと)
11111111(→16進数のFF)
————
10101010(→排他的論理和)

みごとに、8ビットの全ビットが反転された結果となります。

この1行を丸暗記すれば、基本情報技術者試験の「令和元年秋期午前問2」は回答できるといえば、それまでですが、せっかくなら理屈も覚えたってください。

スポンサーリンク

8ビットの値の全ビットを反転する方法は?

8ビットの値の全ビットを反転する方法は、冒頭にも書いた通りなのですが、せっかくなら覚えておくべき知識がたくさん。

「知ってるよ」という人は、適当に飛ばしてください(*´▽`*)。

【予備知識】ビットは0と1のかたまり

まず、1つ目の知識として、「ビットとはなんぞや?」というお話。教科書的な説明はわかりませんが、ビットの意味を直接聞かれることは、ほぼ、ないです。

ひとまず、「ビットは0と1のかたまり」、スイッチのON/OFFのイメージと思えばOKです。

【予備知識】16進数を10進数に変換

16進数を10進数に変換するには、さらに2つの知識が必要。

  • 16進数の1~F→10進数の1~15であること
  • (16進数のn桁目を10進数に変換×16^n-1桁)
    +(16進数のn-1桁目を10進数に変換×16^16進数のn-2桁)
    +・・・+(16進数の1桁目を10進数に変換^16進数の1桁)を繰り返す

たとえば、16進数のABCを10進数に変換する場合。

16進数のAは10、Bは11、Cは12なので、下記の通り。

16進数のABC=10×16^(3-1桁)+11×16^(2-1桁)+12×16^(1-1桁)
=10×16^2+11×16^1+12×16^0
=2560+176+12
=2748

【予備知識】10進数から2進数に変換

ちょうど上で出した、2748を2進数にしてみましょう。

10進数から2進数に変換するには、こんな感じの割り算をします(計算めんどいので、実際には2748より小さい値で出題されるはず)。

2748÷2=1374あまり0(ここまであまりを書く)
1374÷2=687あまり0
687÷2=343あまり1
343÷2=171あまり1
171÷2=85あまり1
85÷2=42あまり0
42÷2=21あまり1
21÷2=10あまり1
10÷2=5あまり0
5÷2=2あまり1
2÷2=1あまり0
1÷2=0あまり1(ここから順に)

わり算の商が0になるまでくりかえして、下から順番にわり算のあまりを書き上げていきます。

つまり、101011011100と書けば、あら不思議。2進数の完成です。

【予備知識】排他的論理和は自分だけが1なら1、それ以外は0になる

そして、排他的論理和は自分だけが1なら1、それ以外は0になります。

排他的論理和(XOR)とは
AB排他的論理和(XOR)考え方
110AかつB
101Aだけ
011Bだけ
000AでもBでもない

Aだけが

8ビットのかたまりを適当に作って、16進数のFFで反転して終わり

ためしに8ビットのかたまりを適当に作ってみます。ここでは、01010101と仮定。

これにたいして、16進数のFF=10進数の255=2進数の11111111と、排他的論理和をとると。

01010101(→もと)
11111111(→16進数のFF)
————
10101010(→排他的論理和)

8ビットの全ビットが反転されます。8ビットが何であれ、16進数のFFの排他的論理和をとれば完成です。

スポンサーリンク

全ビットを反転するには、同じビット数のすべての値が1の排他的論理和をとる

ちなみにですが、全ビットを反転するには、同じビット数のすべての値が1の排他的論理和をとればよし

5ビットなら5ビットすべての値が1の排他的論理和をとる

例えば、5ビット01010の全ビットを反転したいときに、同じ5ビットのすべての値が1の排他的論理和をとると。

01010(→もと)
11111(→同じビット数で値がすべて1)
——-
10101(→排他的論理和)

となるので、やはり全ビットを反転することができます。

ちなみに、2進数の11111は10進数の31、16進数に直すと1Fなので、「16進表記の1Fの排他的論理和」をとればいいわけ。

本質は、排他的論理和と進数の変換を知っているか?

そして、「同じビット数のすべての値が1の排他的論理和をとる」みたく、わざわざ暗記しなくても

  • 排他的論理和を知っているか?
  • 16進数→10進数の変換ができるか?(あるいは10進数→16進数)
  • 10進数→2進数の変換ができるか?(あるいは2進数→10進数)

がわかっていれば、その場で答えを出せます。1問でいろんな知識を問えるわけですね(*´▽`*)。

まとめ

8ビットの値の全ビットを反転する方法(操作)は、16進表記 FF のビット列と排他的論理和をとることです。

そこから、いろいろと書きましたが、できれば「その場で答えを出す」ようにして。

他のことを暗記したほうがいいと思ったりしたわけです(-_-;)。

スポンサーリンク

▼この記事がいいと思ったら、下の画像をクリックしてくれたら励みになります!

にほんブログ村 IT技術ブログ システムエンジニアへ

コメント

タイトルとURLをコピーしました