負数表現

コンピュータは数値を2進数で表現するというのはお馴染みですが、
今回はその負数を表すときの表現方法をご紹介します。

2進数の負の値を表すときは2の補数というものを用いて表します。
(数値を表すビット数が決まってるときに使えます)
どのように表現するかというと

正(プラス)の2進数が[mathjax]
\begin{eqnarray*}
(00110101)_2 = (53)_{10}
\end{eqnarray*}
のとき、まずは全ビットを反転します。
つまり0を1に、1を0にします。そうすると
\begin{eqnarray*}
(11001010)_2
\end{eqnarray*}
これが1の補数といわれる状態です。
これに+1したものが2の補数になります。[mathjax]
\begin{array}{rr}
& (11001010)_2 \\
+ & (00000001)_2 \\
\hline
& (11001011)_2
\end{array}
\begin{eqnarray*}
(11001011)_2 = (-53)_{10}
\end{eqnarray*}
となります。

つまり既に負数表現された値を読み解く際は、
2の補数を解く必要があるということですね。
例えば
\begin{eqnarray*}
(11110101)_2
\end{eqnarray*}
これが負数表現だとすると
まず-1をして
\begin{array}{rr}
& (11110101)_2 \\
– & (00000001)_2 \\
\hline
& (11110100)_2
\end{array}
全ビットを反転し
\begin{eqnarray*}
(00001011)_2 = (13)_{10}
\end{eqnarray*}
ということは、-13を表していたのだと分かるわけですね。

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