要約:プログラムはなぜ動くのか2章パート2

記事
IT・テクノロジー
本日もやっていきます。
今日は2進数の演算方法の一つであるシフト演算についてお話していこうと思います。
ではよろしくお願いします。

シフト演算

シフトの名の通り、数値の桁を左右にずらす演算法。
左シフトの場合は上位方向にずらし、右シフトの場合は下位方向のずらす。
左シフトの場合
例えば、10進数での39を左に2シフトする場合は
1.まず2進数に変換し、00100111にする。
2.数字を全て左に二つずらす。すると、一番左の数値は二つ消え、100111になる。
3.空欄になった右二つの桁には0を入れる。
結果、10011100になる。
前回の記事で2進数の変換は説明しているのでぜひこの数値が10進数ではいくつになるのか、やってみてください。
シフト計算でなにが起こってるかを説明したいと思います。
そのためにまず、前回同様10進数だとどうなるかを説明しますが、超簡単です。
10進数で0を一つ足すとどうなるか。
皆さんご存じの通り10倍になります。
2進数でも理屈は同じです。
10進数では10倍のように、2進数では2倍になります。
逆に桁が一つ減ると、数値は1/2倍になります。

符号ビットと補数

右シフトを説明する前に符号ビットと補数について説明したいと思います。
まず符号ビットですがこちらは簡単です。
2進数でマイナスを求める場合に最も一般的に用いられる方法で、
最上位の桁を0の時はプラス、1の時はマイナス
とする方法です。
この最上位の桁を符号ビットと呼びます。
次に、補数とはプラスの値を用いてマイナスの値を表す方法です。
すでに意味が分からないと思いますが、お付き合いください。
補数は
1.2進数で表された数値を全ての桁で反転させます。(0の桁は1、0の桁は1)
1.反転させた結果に1を加える。
これでできます。
例えとして8桁の2進数での1(即ち00000001)をマイナスの値にしてみます。
まず1ステップ目として、反転させ、10000000にしそれに1を足すと11111111になります。
これ一見意味が分からないと思いますが、次のを見ていただけると若干わかるかなと思います。
10進数の1 - 1 = 1+(-1) = 0
を2進数に正しく変換した場合
00000001 + (-11111111)
となり、計算したら
00000001 + 11111111 = 0
になるのが分かると思います。

まとめ

今回はこんな感じです。
納得いかない人もいるかと思いますが(僕を筆頭に)雰囲気としては、x^0が1になるのと同じ感じです。
別の式に当てはめてみるとはまる、けどそれ単体だと微妙に納得いかない感じのやつです。
ここは正直僕も途中で諦めました。
細かい情報を見つけられなかったので恐らくあまり理解しなくてよいのかなと勝手に解釈して飛ばしてます。
短めですが締めたいと思います。内容が難しい分長いと疲れちゃいますから。
というわけで以上、レイでした

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す