NekoC

猫でもわかるC言語の個人的なまとめ資料

View on GitHub

01_プログラムの仕組み

C言語でプログラムを作成する手順

  1. ソースファイルにプログラムを書く
  2. ソースファイルをコンパイルし、オブジェクトファイルを作る
  3. オブジェクトファイルにリンカでライブラリを結合させる

ライブラリ

オブジェクトファイル

リンカ(Linker)

アドレスについて


- 1番地に1
- 2番地に20
- 3番地に230のデータを格納した場合

|0番地     | 1番地     | 2番地     | ....
|0000 0001 | 0001 0100 | 1110 0110 | ....

疑問点

  1. 255より大きい数字はどうするのか?
  2. マイナスの値はどうするのか?
  3. 小数点のつく数字はどうするのか?

255より大きい数字の表現方法


例) 100番地と101番地を使用して12345を表現した場合

12345= 0011 0000 0011 1001

# ビッグエンディアン

|----------|-----------|
|(上位)    | (下位)    |
|100番地   | 101番地   |
|----------|-----------|
|0011 0000 | 0011 1001 |
|----------|-----------|

# リトルエンディアン

|----------|-----------|
|(上位)    | (下位)    |
|100番地   | 101番地   |
|----------|-----------|
|0011 1001 | 0011 0000 |
|----------|-----------|

※ 大人(ビッグ)の方が素直。と覚える。

負数の表現

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. 通常の計算

  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)

  1. バイト数で数字を表すときに。マイナスも考えるかどうかで表すことのできる数値の範囲が異なる。
  2. 負数とは桁あふれを利用して、0になるように調整した数である。

実数の表現

固定小数点表示法

浮動小数点表示法

単精度浮動小数点数(32ビット)
符号ビット 指数 仮数
1 00000000 00000000000000000000000
倍精度浮動小数点数(64ビット)