01_プログラムの仕組み
C言語でプログラムを作成する手順
- ソースファイルにプログラムを書く
- ソースファイルをコンパイルし、オブジェクトファイルを作る
- オブジェクトファイルにリンカでライブラリを結合させる
ライブラリ
- 処理内容をあらかじめ機械語に翻訳して保管しているファイル
オブジェクトファイル
リンカ(Linker)
アドレスについて
- 1番地に1
- 2番地に20
- 3番地に230のデータを格納した場合
|0番地 | 1番地 | 2番地 | ....
|0000 0001 | 0001 0100 | 1110 0110 | ....
疑問点
- 255より大きい数字はどうするのか?
- マイナスの値はどうするのか?
- 小数点のつく数字はどうするのか?
255より大きい数字の表現方法
例) 100番地と101番地を使用して12345を表現した場合
12345= 0011 0000 0011 1001
# ビッグエンディアン
|----------|-----------|
|(上位) | (下位) |
|100番地 | 101番地 |
|----------|-----------|
|0011 0000 | 0011 1001 |
|----------|-----------|
# リトルエンディアン
|----------|-----------|
|(上位) | (下位) |
|100番地 | 101番地 |
|----------|-----------|
|0011 1001 | 0011 0000 |
|----------|-----------|
※ 大人(ビッグ)の方が素直。と覚える。
負数の表現
- 負の数を考慮しなければならないため、半分で分けてみる。
255
を-1
、254
を-2
とすると下記のようになる。
2進数 |
10進数 |
マイナスを考慮した10進数 |
0000 0000 |
0 |
0 |
0000 0001 |
1 |
1 |
0000 0010 |
2 |
2 |
0000 0011 |
3 |
3 |
・・・ |
・・・ |
・・・ |
0111 1110 |
126 |
126 |
0111 1111 |
127 |
127 |
1000 0000 |
128 |
-128 |
1000 0001 |
129 |
-127 |
・・・ |
・・・ |
・・・ |
1111 1101 |
253 |
-3 |
1111 1110 |
254 |
-2 |
1111 1111 |
255 |
-1 |
- 上記のように一覧表を作成すると、先頭ビットが1であるものが負になることがわかる。
- この先頭ビットを符号ビット(sign bit)と呼ぶ。
加算した場合
1. 通常の計算
0101 0001 (81)
+ 0011 1001 (57)
------------
1000 1010 (138)
255 + 1 = 256
2. 桁あふれ
1111 1111 (255)
+ 0000 0001 (1)
------------
0000 0000 (0)
0になってしまう!=> 1に足して0になるもの => -1
3. 引き算
1111 0110 (-10)
+ 0000 1010 (10)
------------
0000 0000 (0)
- 桁あふれを利用して和が0になるようにした数字が負数となる!
- バイト数で数字を表すときに。マイナスも考えるかどうかで表すことのできる数値の範囲が異なる。
- 負数とは桁あふれを利用して、0になるように調整した数である。
実数の表現
固定小数点表示法
1.25
とか0.125
小数点がある場所は常に1より小さい桁である。
浮動小数点表示法
.125E1
とか.125E0
とか、小数点の場所が動く。
単精度浮動小数点数(32ビット)
- 符号ビット: 1ビット
-
指数ビット: 8ビット(0~255 |
-127~128) |
- 仮数ビット: 23ビット
符号ビット |
指数 |
仮数 |
1 |
00000000 |
00000000000000000000000 |
- この表現方法をイクセス表現とする。
- 127をバイアスとする。
倍精度浮動小数点数(64ビット)
- 符号ビット: 1ビット
- 指数ビット: 11ビット
- 仮数ビット: 52ビット