このスライドの使い方

  • 画面下の「▶」で再生開始、「⏸」で一時停止

  • 画面右下の「>」で次頁へ、「<」で前頁へ

  • 青字下線の部分は、まとめプリントの穴埋め

  • 作業」のところでは、ファイルをダウンロードしてコンパイル・実行

第 7 章「基本型」

教科書 p.169

§ 7.1「基本型と数」

教科書 pp.170–173

「計算機入門」などで扱っている内容なので、ここでは説明を割愛する。

§ 7.2「整数型と文字型」

教科書 p.174

int 型と char 型をもう少し詳しく扱う。

整数型と文字型

教科書 p.174

int 型には型指定子 (type specifier) をつけられる

【符号に関する型指定子】

signed符合付き(負の数も扱える)
unsigned符合なし(正の数と 0 のみ扱える)

整数型と文字型(続き)

教科書 p.175

【サイズに関する型指定子】

short範囲が狭いがメモリーを節約できる
longメモリーを食うが、範囲が広い

整数型と文字型(続き)

教科書 p.175

型指定子の使用例:


  signed short int foo;
  unsigned int bar;
  unsigned long baz;

<limits.h> ヘッダー

教科書 pp.176–177

さまざまな整数型、文字型が表せる値の最小・最大値をマクロとして集めたヘッダーである。

INT_MAX, ULONG_MAX などが定義されている。

作業: List 7-1 を実行する。(プリント Q 7.1.1)

文字型〜ビットと CHAR_BIT

教科書 pp.178–179

説明を割愛する。教科書を読んでおくこと。

sizeof 演算子

教科書 pp.179–180

  sizeof (型名)

指定した型のサイズ(単位: バイト)を返す。

例:


    printf("sizeof(long) = %u\n",
           (unsigned)sizeof(long));

作業: List 7-3 を実行する。

size_t 型と typedef 宣言

教科書 p.181

typedef 宣言は型の別名をつける。構造体・ポインターを学習したあとはよく使う。

一般形:

typedef  新しい型名 ;

例:


typedef unsigned size_t;

整数型の使い分け

教科書 pp.181–183

  sizeof 

式(通常は変数)のサイズを返す。
式が配列の場合は配列全体のサイズを返す。
これから配列の要素数を計算することもできる。

例:


    int n = sizeof(a) / sizeof(a[0]);

作業: List 7-4, List 7-5, を実行する。

整数型の使い分け(続き)

ただし関数の引数として受け取った配列ではそうならない。 (配列の要素数の計算もできない。)
作業: sizeof.c を実行する。

 
#include <stdio.h>

void foo(int x[]) {
    printf("sizeof(x) = %u\n", (unsigned)sizeof(x));
}

int main(void) {
    int a[] = { 1, 2, 3, 4, 5 };
    printf("sizeof(a) = %u\n", (unsigned)sizeof(a));
    foo(a);
    return 0;
} 

整数型の内部表現〜シフト演算

教科書 pp.183–193

「計算機入門」などで扱っている内容なので、説明を割愛する。

ビット演算やシフト演算は組込みソフトウェアの開発では 必須になる。

整数定数

教科書 p.194

8 進定数は先頭に「0」を、
16 進定数は先頭に0xをつけて表記する。

10 進 8 進16 進
48 060 0x30
65 01010x41
97 01410x61

整数定数の型

教科書 p.195

123U, 98765L などの接尾語を使う書き方がある。

整数の表示

教科書 p.196

printf 関数で整数を 8 進数または 16 進数で表示するために、 それぞれ、%o, %x (A 〜 F を大文字にしたいときは %X) という書式指定を用いる。

例:


    printf("%o\n", 16);  /* 20 と出力 */  
    printf("%x\n", 46);  /* 2e と出力 */  
    printf("%X\n", 29);  /* 1D と出力 */

作業: List 7-8 を実行する。

オーバーフローと例外

教科書 p.197

説明を割愛する。教科書を読んでおくこと。

§ 7-3「浮動小数点型」

教科書 p.198

double 型のほかに float 型、 long double 型がある。

通常は double 以外はあまり使わない。 組込み系では float を使うことがあるかもしれない。

浮動小数点型〜浮動小数点定数

教科書 pp.198–200

浮動小数点型は「計算機入門」などで扱っている内容なので、説明を割愛する。

定数には 1.23F, 3.14L などの接尾語を使う書き方、 6.02E23 など指数表記などがある。

<math.h> ヘッダー

教科書 p.201

sin, cos, sqrt (square root — 平方根), exp, log などの 数学関数のプロトタイプ宣言が集められているヘッダーである。

gcc では、数学関数を使ったプログラムをコンパイルするとき、大抵 -lm オプションが必要である。

  gcc -lm list0710.c

作業: List 7-10 を実行する。

繰返しの制御

教科書 pp.202–203

浮動小数点数は、10 進の有限小数を正確に表現できるとは限らない。


#include <stdio.h>

int main(void) {
    double x;

    for (x = 0.0; x <= 1.0; x += 0.01) { 
        printf("%.60f\n", x); /* 小数第 60 位 まで表示 */
    }

    return 0;
}

作業: 上記のプログラムを実行する。

繰返しの制御(続き)

教科書 pp.202–203

誤差が蓄積するので、繰返しを制御する変数には、できるだけ浮動小数点数型(float, double)は 使わない。

繰返しの制御(続き)

教科書 pp.202–203


    /* 悪い(誤差が蓄積する) */
    double f;
    for (f = 0.0; f < 1.0; f += 0.01) { … }

    /* 良い(誤差が蓄積しない)*/		      
    int i;
    for (i = 0; i < 100; i++) {
        double f = i / 100.0; …
    }

作業: List 7-11, List 7-12, を実行して比べる。

§ 7-4「演算と演算子」

教科書 p.204

演算子の優先順位と結合性

教科書 pp.204–205

優先順位や結合性をすべてを覚える必要はないが、必要に応じて表を調べられ るように、どのような演算子があるかくらいは覚えておきたい。(Table 7-11)

型変換の規則

教科書 pp.206–207

暗黙の型変換やキャストのときの詳しい規則は、必要になったら調べる。

第 7 章・終