%表題   MISC1 (その他の基本処理下位パッケージ)
%
%履歴
%\Drireki{
%         92/01/17 酒井  敏
%         92/04/22 林祥介   (4.1版)
%         94/04/23 塩谷雅人 (5.z版)
%        }
%
\section{整数の内部表現}
  % \label{integer}

BITLIB はビット操作をするためのライブラリである. 
ビット操作をする変数には通常整数が使われる. 
その際に, 
整数がどのようなビット列として表現されているかということが問題となる. 
また, ビット列を扱う場合には, 
10進の整数値として扱うより, 16進数として扱った方が便利な場合もある. 
そのためのライブラリが HEXLIB である. 
\vspace{1em}

符号つきの整数を計算機の内部で表現する方法としては
「絶対値表示」と「補数表示」がある. 
「絶対値表示」とは整数の絶対値を2進数で表現して, 
その先頭ビットに符号ビット(正ならば0, 負ならば1)をつけたものである. 
この方法は素朴でわかりやすいが, 
0という整数の表現方法は0と$-0$の2種類存在することになる. 
\vspace{1em}

「補数表示」は以下に示すように, もう少し込み入った定義になっているが, 
ほとんどの計算機では, この補数表示が採用されている. 
\begin{itemize}
  \item {\bf 補数表示}
    \begin{quote}
      32ビットの符号つき整数の補数表示では, 
      0及び正の整数は「絶対値表示」同様に, 
      31ビットの2進数の先頭に符号ビット(0)をつけたもので表される. 
      \vspace{1em}
      
      これに対して, 負の整数は, 
      その整数の\.絶\.対\.値の「補数」に
      符号ビット(1)をつけたもので表される. 
      一般に複数の「補数」の定義があるが, 
      ここで言う補数とは「2進数における2の補数」(真補数) のことである. 
      この場合, 
      ある数$X$の補数とは, 「$X$に加えると$2^n$になるような数」で, 
      「各ビットの0と1を入れ換え, 最下位桁に1を足した数」といっても
      同じである. 
      \vspace{1em}
      
      要するに, 符号つき整数を
      符号ビットまで含めて単純に32ビットの(正の)2進数と見なした時, 
      負の整数$N$は$2^{31}+N$として表される(下表). 
      この方法では, $-2^{31}$ から $2^{31}-1$までの
      数を表現できる. 
      \vspace{1em}

      \begin{center}
      \begin{tabular}{|c|c|}
        \hline
        内部表現                            &  数値     \\
        \hline
        11111111 11111111 11111111 11111111 &  -1       \\
        11111111 11111111 11111111 11111110 &  -2       \\
         $ \cdots \cdots \cdots $           & $\cdot$   \\
         $ \cdots \cdots \cdots $           & $\cdot$   \\
        10000000 00000000 00000000 00000000 & $-2^{31}$ \\
        01111111 11111111 11111111 11111111 & $+2^{31}-1$ \\
         $ \cdots \cdots \cdots $           & $\cdot$   \\
         $ \cdots \cdots \cdots $           & $\cdot$   \\
        00000000 00000000 00000000 00000001 &    1      \\
        00000000 00000000 00000000 00000000 &    0      \\
        \hline
      \end{tabular}
      \end{center}
      \vspace{1em}

      この表現を用いると, 加減算において符号部分も含めて正の数と
      統一的に扱うことができるようになり, 
      演算回路の構成が簡単になるため, 
      多くの計算機でこの表現法が用いられている. 

    \end{quote}
\end{itemize}

このように補数表示では, 
内部表現のビット列と整数としての値が1対1に対応しているので, 
データを数字ではなくビット列として処理したい時には, 
整数型の変数が使われる. 





