「ビット列を反転して1を加える」と二進数の正負が逆転する。
この理屈(アルゴリズム)が分からないまま使っている学生はいないだろうか?
負の数に対しても同じことをしたら正の数になるのか? という学生もいそう。
負の数を正の数に変換するときは、1を引くの? これもいそう。
理解の仕方の問題である。
例えば、A=00101010 の正負を逆転した数を知りたいとする。
Aに加えて、11111111となる数は?
・・・11010101 つまりAのビット列を反転した数。
では、さらに1を加えたら?
100000000だが、オーバーフローして、00000000 すなわち0になる。
ということは、A=00101010 に対して、
「ビット列を反転した上に1を加えた数」を加えると0になるということ。
だから、Aに対して「ビット列を反転して1を加えた数」はAの正負を逆転した数である。
この話の最初で設定したAは正であろうが、負であろうが理屈は同じである。
(授業では、符号ビットの話をするが、ここでは省略)
昨日のブログの内容もこれと同じである。
RGBは加法混色だから、
ある色に対して加えたら白になる色は?・・・補色である
あるビット列に加えて111・・・1になるビット列は?・・・反転したビット列である
さすが、hohhohさんはすぐに気がついてくれました。
実際に、画像処理ソフトで反転した画像の同じ座標の色はビット列の反転です。
フリーソフトIlfanViewでも簡単に実験できます。
画像をクリックするとその点の色情報がタイトルバーに表示されるので、
適当な画像をネガポジ変換して確認すればよいのです。
このソフト一つでかなりの事を教えることができます。本校の授業では重宝しています。
さらに発展させると、
二進数Aから二進数Bを引くということは、
二進数Aに、二進数Bの正負を逆転した数を加えるということ。
つまり、Aに「Bのビット列を逆転して1を加えた数」を加えるということ。
色においては、
ある色のレイヤーに補色のレイヤーを重ねて、その補色のレイヤーの不透明度を50%にする。
下のレイヤーが50%だけ透けてみえる。つまり、両方のレイヤーが50%づつの色で重なる。
数値で考えると、それぞれの色のビット列の半分どうしの和。つまり111111…1の半分。
白と黒の中間値の50%グレーになる。
「もとの色が何であっても、一面グレーになる。」
この理屈。昨日のエンボス加工の実験をしてから説明するとバッチリだ。

最近のコメント