旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

補数とかコンピュータの2進数計算とか

2007年8月14日

前に何かのエントリで補数の意味がわからなくて損した気分になったことがあったので
IT戦記のエントリをトリガーに補数が何たるかを調べてみた。

したら、予測はしてましたが、疑問が連鎖してして収拾がつかなくなったので、途中でセーブします。

参考リンク

メモ

  • 補数→2の補数→コンピュータ2進数計算→符号有りのコンピュータ2進数計算、の順で調べると良い。
  • 最後のコンピュータでの整数の計算の内容がわかれば、いろんなことがわかるのかもしれないけど、理解するのに1日とかじゃ無理そう。
  • 7の補数が-8になるのは

    alert(~7); // -> -8
    

    例えば、8ビット符号付整数(127~-128)の場合

    0000 0111 (10進数の7に相当)
    1111 1001 (その補数)
    -111 1001 (1ビット目は符号ビット)
    -(000 1000)
    (負の数の場合の符号ビットを除く絶対値部分は補数として表現されている。
     ので、それを戻してやる。つまり、1引いた後にビットを反転させる)
    

    ということで-8になるらしい。

    ちなみに、負の数の場合に何故補数で表現されているかというのは、計算するときに便利であり、そもそも数学的に自然であり当然のようなんですが・・・よくわかりませんでした、無念。

まぁ、この理解度じゃ ~~(Math.random()*10) は使えないよねってことで、おとなしくMath.floorを使ってようと、そういう結論になりました。