Next: 配列
Up: 計算機言語 I 第 6
Previous: 整数型の計算
最初の 6-1.c の結果の解説をします.
プログラムでは, a
と初期化しています. それを2乗した数,
を出力させると, 0 という結果がでます. 皆さんの環境では int型は
32ビットの数です. 32ビットの2進法
(32桁)は
です.
これに 1 を加えると 数学的には
(33桁)となりますが,
皆さんが使っている C言語の整数型は 32ビットなので, 最上位桁の 1は計算の中
で捨てられてしまい, 結果は
となるのです.
上のことを利用して負の数を実現します. 即ち,
は
1を加えると 0 となる数ですから -1 とするのです. この仕組みで
0 を中心に対称になるように正負の数を扱おうとすると,
次のようになります.
- 非負の数は
から
までの数で, 最上位のビットが 0.
- 負の数は
から
までの数で, 最上位のビットが 1.
この形で負の数を実現することを, 『2の補数』表現といいます.
復習の意味で次の問題をやって下さい.
- 問題 1(2進法, 8進法, 16進法)
- 空欄を埋めて下さい.
計算機内部での整数の表記は 2進法を使用しています.
例えば10進法で37は, 2進法では
となります.
2進法で101110
と表示された数は,
10進法では,
となります.
2進法を 8進法や16進法に変換するのは, 8と16が各々,
2の3乗, 4乗であることを利用すると簡単になります.
101110
の場合, 右から 3桁毎に区切ると,
上位 3桁は,101
なので, 8進法で
,
下位 3桁は,110
なので, 8進法で
となりますから,
全体を 8進法表示すると
になります.
同じ数を16進法で表示するには, 右から 4桁毎に区切ると
上位 4桁(この場合 2桁)は, 10
なので,
,
下位 4桁は, 1110なので, 10進法で,
となります.
16進法では, 9より大きい数を 1桁で表すのに, 順に A, B, ..., F を
用いますから, この数を16進法で表すと
となります.
従って, 全体を16進法で表示すると
となります.
- 問題 2(符号なしの表記法)
- 空欄を埋めて下さい.
8ビット符号無整数の最小値は0,最大値は 2進表示で
,
16進表示で
,10進表示で
です.
- 問題 3(符号付きの表記法)
- 空欄を埋めて下さい.
符号付きの整数を表す場合, 2進表示の最上位の桁(ビット)によって正負を決めます.
最上位の数字が
の時は正の数で,
の時は
負の数を表します. 負の数を表すのに全てのビットを反転して,
1を加える方法があり, この方法を
表示といいます.
この方法で, -1を 8ビットの 2進法で表すと次になります.
1は 8ビットの 2進法で00000001
ですから, これを反転すると,
, さらに 1を加えると
となります.
これは16進法で
となります.
同じ方法で10進法の-41を表すと,
+41は 8ビットの 2進法では,
ですから,
これを反転すると,
, さらに 1を加えた,
が, -41の 8ビットの 2進表示となります.
これを16進法で表すと
となります.
- 問題 4
- 空欄を埋めて下さい.
問題 3の方法による符号付き整数の表示で 8ビットの最大の整数は,
最上位ビットが符号を表すことに注意すると, 2進法で
となります.
これを16進法にすると
で, 10進法では,
になります.
これの符号を変えたものの 2進表示(反転して 1を加える)は,
となります.
最小の整数はこれより 1小さく,
となります.
これは16進法では
, 10進法では
です.
16ビットの符号付きの整数の最大値は,
16進法で
, 最小値は, 16進法で
となります.
10進法ではそれぞれ
,
となります.
Next: 配列
Up: 計算機言語 I 第 6
Previous: 整数型の計算