このスライドの使い方

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

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

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

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

第 7 章「基本型」

教科書 pp.181–225

§ 7.1「基本型と数」

教科書 pp.182–185

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

§ 7.2「整数型と文字型」

教科書 p.186

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

整数型と文字型

教科書 p.186

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

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

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

整数型と文字型(続き)

教科書 p.186

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

short範囲が狭いがメモリーを節約
longメモリーを食うが、範囲が広い
long longさらに…

整数型と文字型(続き)

教科書 p.175186

型指定子の使用例:


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

整数型の使い分け

教科書 p.188

教科書を読んでおくこと

<limits.h> ヘッダー

教科書 pp.188–190

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

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

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

文字型〜ビットと CHAR_BIT

教科書 pp.190–192

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

sizeof 演算子

教科書 pp.192–193

  sizeof (型名)

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

例:


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

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

size_t 型と typedef 宣言

教科書 p.194

typedef 宣言は型の別名をつける

一般形:

typedef  新しい型名 ;

例:


typedef unsigned size_t;

構造体・ポインターを学習したあとはよく使う

配列の要素数の求め方

教科書 p.196

  sizeof 

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

例:


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

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

作業: まとめのプリント Q 7.1.2 をやってみる

配列の要素数の求め方(続き)

ただし関数の引数として受け取った配列ではそうならない (配列の要素数の計算もできない)

作業: 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.197–209

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

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

整数定数

教科書 p.210

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

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

整数定数の型

教科書 p.211

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

整数の表示

教科書 p.212

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 7-9 を実行する

オーバーフローと例外

教科書 p.213

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

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

教科書 p.214

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

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

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

教科書 pp.214–216

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

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

<math.h> ヘッダー

教科書 p.217

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

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

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

  gcc list0710.c -lm

繰返しの制御

教科書 pp.218–219

浮動小数点数は、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;
}

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

作業: まとめのプリント Q 7.1.3 をやってみる

繰返しの制御(続き)

教科書 pp.218–219

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

繰返しの制御(続き)

教科書 pp.218–219


/* 悪い(誤差が蓄積する) */
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-12, 7-13 を実行して比べる

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

教科書 p.220

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

教科書 pp.220–221

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

型変換の規則

教科書 pp.222–223

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

第 7 章・終