1 C 言 語 入 門 第 2 週 プログラミング 言 語 Ⅰ( 実 習 を 含 む ), 計 算 機 言 語 Ⅰ 計 算 機 言 語 演 習 Ⅰ, 情 報 処 理 言 語 Ⅰ( 実 習 を 含 む )
2 explorer の 使 い 方 先 週 の 復 習 1
3 explorer.exe ファイルの 操 作 を 行 うソフト デスクトップもエクスプローラーの 一 部 デスクトップも explorer これが explorer コントロールパネルも explorer ここに explorer と 入 力 し ENTERキーを 叩 いても explorer が 表 示 できます
4 ポップアップ(popup)メニューの 表 示 表 示 させたい 場 所 でマウス 右 クリック 例 えばデスクトップの 何 もない 場 所 で メニューの 右 にある 三 角 印 サブメニューが 出 る ポップアップメニュー サブメニュー
5 ファイルの 作 成 とオープン explorer の 作 成 したい 場 所 で マウス 右 クリック ポップアップメニューが 出 る 新 規 作 成 テキストドキュメント 出 来 たファイルは 適 当 に 名 前 を 付 けても 良 い マウス 左 ダブルクリック メモ 帳 で 開 かれる
6 フォルダの 作 成 作 成 したい 所 で 右 クリック ポップアップメニューで 新 規 作 成 フォルダ 新 しいフォルダ ができた
7 フォルダを 開 く フォルダアイコンの 上 で 左 ダブルクリック explorer が 開 く 開 いているフォルダ 名
8 ファイルの 移 動 テキストドキュメント を 新 しいフォルダ の 中 に 移 動 ドラッグ&ドロップ すれば 良 い ドラッグ&ドロップ 移 動 しました
9 ファイルのコピー Ctrl を 押 したまま ドラッグ&ドロップ コピーができました
10 ファイルの 選 択 ファイルを 単 純 にクリック ファイル 左 側 のチェックボックスをクリック CTRL キーを 押 したままクリック( 複 数 選 択 ) ファイルを 囲 むようにドラッグ( 複 数 選 択 ) 選 択 された
11 ファイルの 削 除 選 択 したファイル 上 で 右 クリック 削 除 ファイルを 選 択 して Delete キーでも 良 い ファイルが 消 えた
12 CUI 作 業 環 境 ( 端 末 terminal) フォルダをSHIFT+ 右 クリック コマンドプロンプト mintty + bash 右 クリックしたフォルダを 作 業 ディレクトリにして 端 末 (コマンドプロンプトやmintty)が 開 かれる
13 cmd と bash の 主 なコマンド cmd bash マニュアルの 表 示 help [コマンド 名 ] man [コマンド 名 ] ファイル 一 覧 dir ls メッセージの 表 示 echo メッセージ echo メッセージ ファイルの 内 容 を 表 示 type ファイル 名 cat [ファイル 名 ] 作 業 ディレクトリの 移 動 cd ディレクトリ 名 cd [ディレクトリ 名 ] 作 業 ディレクトリの 表 示 cd pwd ファイルコピー copy コピー 元 コピー 先 cp コピー 元 コピー 先 ファイル 移 動 move コピー 元 コピー 先 mv コピー 元 コピー 先 ファイル 削 除 del ファイル 名 rm ファイル 名 ディレクトリの 作 成 mkdir ディレクトリ 名 mkdir ディレクトリ 名 ディレクトリの 削 除 rmdir ディレクトリ 名 rmdir ディレクトリ 目
14 cmd と bash の 主 なキー 操 作 コマンド cmd bash 動 作 Home Ctrl + A 行 頭 へ 移 動 END Ctrl + E 行 末 へ 移 動 Shift + End Ctrl + K 行 末 まで 削 除 tab ファイル 名 の 補 完 コマンド 履 歴 の 再 利 用
教 科 書 pp.30-31. 15 ファイルの 場 所 の 記 述 方 法 (パス) 以 下 の 図 のフォルダ 構 成 を 仮 定 する C Users kou Desktop CLangI week01 hello.c CLangII week01 hellogui.c 作 業 フォルダは CLangI
16 作 業 フォルダ カレントディレクトリ(current directory)とも 言 う コマンドプロンプト mintty + bash ここに 表 示 されているのが 作 業 フォルダ
教 科 書 pp.30-31. 17 Windows の 絶 対 パス 相 対 パス フォルダの 階 層 を で 区 切 る 現 在 の 作 業 フォルダは 以 下 の 場 所 C Users kou Desktop CLangI 絶 対 パスはルートデバイスを 基 準 に C Users kou Desktop CLangI week01 hello.c C Users kou Desktop CLangII week01 hellogui.c 相 対 パスは 現 在 の 作 業 フォルダを 基 準 に week01 hello.c.. CLangII week01 hellogui.c
18 Cygwin の 絶 対 パス 相 対 パス ディレクトリの 階 層 を / で 区 切 る 現 在 の 作 業 ディレクトリは 以 下 の 場 所 /cygdrive/c/users/kou/desktop/clangi 絶 対 パスはルートディレクトリ / を 基 準 に /cygdrive/c/users/kou/desktop/clangi/week01/hello.c /cygdrive/c/users/kou/desktop/clangii/week01/hellogui.c 相 対 パスは 現 在 の 作 業 ディレクトリを 基 準 に week01/hello.c../clangii/week01/hellogui.c
19 特 別 なフォルダ 名... 1つ 親 のディレクトリを 意 味 する 現 在 のディレクトリを 意 味 する UNIX では 実 行 ファイルの 検 索 パスに 作 業 ディレ クトリが 含 まれない 作 業 ディレクトリ 内 にある 実 行 ファイルを 実 行 する 際./ を 実 行 ファイル 名 の 前 に 付 ける 必 要 がある
20 補 足 フォルダとディレクトリは 同 じ 概 念 Windows 流 ではフォルダと 呼 ぶ UNIX 流 ではディレクトリと 呼 ぶ /cygdrive は cygwin 特 有 の 仮 想 ディレクトリ Windows のドライブが 配 置 されている 通 常 UNIX ではパスに (コロン)を 使 わないため ネットワークドライブもアクセス 出 来 る UNC 表 記 を 用 いる fs.cc.yamaguchi-u.ac.jp YUアカウント 名 //fs.cc.yamaguchi-u.ac.jp/yuアカウント 名
21 コマンドの 検 索 パス 環 境 変 数 PATH に 設 定 されたパスからコマン ドを 探 して 実 行 する cmd での 確 認 方 法 > echo %PATH% 複 数 のパスは ; (セミコロン)で 区 切 って 与 える bash での 確 認 方 法 $ echo $PATH 複 数 のパスは (コロン)で 区 切 って 与 える
教 科 書 p.27. ファイル 拡 張 子 の 表 示 Windows 8 以 降 22 explorer.exe から 表 示 ファイル 名 拡 張 子 ON ファイル 名 末 尾 に. と 表 示 される
教 科 書 p.27. ファイル 拡 張 子 の 表 示 Windows 7 以 前 23 explorer.exe から Alt ツール オプション 表 示 登 録 されている 拡 張 子 は 表 示 しない OFF Alt 叩 くとメニュー 出 る ファイル 名 末 尾 に. と 出 る
24 ファイル 拡 張 子 とは? ファイルの 種 類 を 表 している アプリケーションとの 関 連 付 けに 用 いられる 実 行 ファイルは.exe や.com テキスト 文 書 は.txt Word2007 以 降 は.docx それより 前 は.doc Excel2007 以 降 は.xlsx それより 前 は.xls PowerPoint2007 以 降 は.pptx それより 前 は.ppt 圧 縮 ファイルは.zip.lzh.tgz.cab 等 々 等 々 変 更 すると 開 けなくなる 普 通 は 変 更 する 必 要 はない メール 等 で 添 付 されて 来 たファイルには 注 意 文 書 ファイルに 見 えて 実 行 ファイル( 実 はウィルス)ということも
教 科 書 pp.36-42. 25 C コンパイラによるコンパイル cmd.exe から bcc32 で 行 った 例 コマンドプロンプト + Borland C++ C Users kou Desktop CLangI2014>dir /B hello.c ファイル 一 覧 の 表 示 C Users kou Desktop CLangI2014>bcc32 hello.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland hello.c 警 告 W8070 hello.c 6 関 数 は 値 を 返 すべき( 関 数 main ) Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland コンパイル C Users kou Desktop CLangI2014>dir /B hello.c hello.exe hello.obj hello.tds C Users kou Desktop CLangI2014>hello hello, world ファイル 一 覧 の 表 示 作 成 した 実 行 ファイルを 実 行
教 科 書 p.17. 26 C コンパイラは 何 をしているのか? デバッグ 情 報 付 きコンパイルし 逆 アセンブル.rdata セクション 部 分 mintty + bash $ gcc -g hello.c $ objdump -d -S -s a.exe a.exe ファイル 形 式 pei-x86-64... セクション.rdata の 内 容 100403000 63796767 636a2d31 342e646c 6c005f4a cyggcj-14.dll._j 100403010 765f5265 67697374 6572436c 61737365 v_registerclasse 100403020 73000000 00000000 00000000 00000000 s... 100403030 68656c6c 6f2c2077 6f726c64 00000000 hello, world... 100403040 4743433a 2028474e 55292034 2e382e31 GCC (GNU) 4.8.1... セクション.text の 逆 アセンブル... 00000001004010d0 <main> #include <stdio.h> 文 字 データの16 進 表 現 文 字 データの 配 置 アドレス 埋 め 込 まれた 文 字 データ
27 C コンパイラは 何 をしているのか?.text セクション 部 分 セクション.text の 逆 アセンブル... 00000001004010d0 <main> #include <stdio.h> アセンブラコードを アセンブルして 得 られた マシン 語 のバイトコード C 言 語 を コンパイルして 得 られた アセンブラコード main() { 1004010d0 55 push %rbp 1004010d1 48 89 e5 mov %rsp,%rbp 1004010d4 48 83 ec 20 sub $0x20,%rsp 1004010d8 e8 73 00 00 00 callq 100401150 < main> printf("hello, world n"); } 1004010dd 48 8d 0d 4c 1f 00 00 lea 0x1f4c(%rip),%rcx # 100403030 <.rdata> 1004010e4 e8 77 00 00 00 callq 100401160 <puts> 1004010e9 48 83 c4 20 add $0x20,%rsp 1004010ed 5d pop %rbp 1004010ee c3 retq 1004010ef 90 nop サブルーチン(printf)の 呼 び 出 し... 配 置 アドレス 元 々の C 言 語 のコード 文 字 データ"hello, world n"の 配 置 アドレス( 前 項 参 照 )
C 言 語 入 門 ( 変 数 と 定 数 ) 28
基 礎 知 識 29
30 テキスト 編 集 系 ソフトの 種 類 テキストエディタ (メモ 帳, 秀 丸, etc,,,) 基 本 的 にプレーンな 文 字 情 報 のみ 装 飾 なし リッチテキストエディタ (ワードパッド, etc,,,) 字 体 色 サイズ 等 の 装 飾 が 可 能 に ワードプロセッサ (Word, 一 太 郎, etc,,,) 更 に 高 度 な 文 書 作 成 支 援 機 能 DTPツール (InDesign, Publisher, etc,,,) 印 刷 用 の 版 下 作 成 特 に 割 付 へ 特 化
プログラミング 向 け テキストエディタの 機 能 構 文 解 析 機 能 シンタックスハイライト 機 能 行 番 号 表 示 機 能 入 力 補 完 機 能 マクロ 機 能 正 規 表 現 対 応 の 検 索 機 能 タグジャンプ 機 能 等 々 31
32 テキストエディタ 窓 の 杜 オフィス / 文 書 作 成 / テキストエディター http//www.forest.impress.co.jp/library/nav/genre/offc/document_txteditor.html 学 習 プログラミング / プログラミング / プログラム 向 けエディター http//www.forest.impress.co.jp/library/nav/genre/stdy/program_progeditor.html Vector Windows / 文 書 作 成 / テキストエディタ http//www.vector.co.jp/vpack/filearea/win/writing/edit/
33 テキストエディタ サクラエディタ http//sakura-editor.sourceforge.net/ xyzzy http//xyzzy-022.github.io/
34 統 合 開 発 環 境 Microsoft Visual Studio http//www.visualstudio.com/ja-jp/ Eclipse Pleiades - Eclipse プラグイン 日 本 語 化 プラグイン http//mergedoc.sourceforge.jp/ NetBeans https//ja.netbeans.org/
教 科 書 p.46. 35 コメント プログラムとしては 解 釈 されない 後 で 読 む 人 用 に 注 釈 をしておく 機 能 /* ~ */ の 間 がコメント // から 行 末 までがコメント comment_test.c 1 2 3 4 5 6 7 8 9 #include <stdio.h> 緑 の 部 分 がコメントとして 扱 われる main() { /* ここがコメント */ printf("hello, world n"); // ここもコメント }
教 科 書 pp.61, 64-66, 98. 36 printf 関 数 の 初 歩 括 弧 の 中 にカンマ, で 区 切 って 複 数 の 引 数 (パラメータ)を 与 える 1つ 目 の 引 数 は 書 式 書 式 内 の %d %f %s 等 の 箇 所 には2つ 目 以 降 の 引 数 が 順 に 埋 め 込 まれる printf("1 + 2 = %d n", 1 + 2); 1 + 2 = n n は 改 行 として 機 能 する ここには int 型 の 整 数 型 データとして 解 釈 した 2つ 目 の 引 数 の 値 ( 上 記 の 例 では1+2の 計 算 結 果 )が 符 号 付 き10 進 数 にして 印 字 される %d は 整 数 %f は 実 数 %s は 文 字 列 の 埋 め 込 み 用
37 演 習 値 を 表 示 してみよう(1/2) printf の1つ 目 の 引 数 に "%d n", "%f n", "%s n" を 与 え 2つ 目 の 引 数 に 整 数 実 数 文 字 列 を 与 えて それぞれの 組 み 合 わせで どうなるか 試 してみよう 1 2 3 4 5 6 printf_practice_11.c #include <stdio.h> void main() { printf("%d n", 123); } 5 行 目 を 書 き 変 えて 計 9つのファイルを 作 りましょう mintty + bash + gcc $ gcc printf_practice_11.c &&./a 123 コマンドプロンプト + Borland C++ >bcc32 printf_practice_11.c && printf_practice_11 Borland C++ 5.5.1 for Win32 Copyright (c) 1993,... printf_practive_11.c Turbo Incremental Link 5.00 Copyright (c) 1997,... 123
38 演 習 値 を 表 示 してみよう(2/2) 結 果 を 調 べて 表 にまとめてみよう ファイル 名 は 整 理 番 号 を 用 いて printf_practice_xy.c のように 付 けてください 例 えば 2の 欄 は printf_practice_32.c となります 整 理 番 号 Y 1 2 3 整 理 番 号 X 第 1 引 数 \ 第 2 引 数 123 123.456 "123.456" 1 "%d n" 123と 表 示 2 "%f n" 3 "%s n" 2
39 SI 接 頭 辞 名 前 記 号 乗 数 キロ(kilo) K 1000 1 =10 3 メガ(mega) M 1000 2 =10 6 ギガ(giga) G 1000 3 =10 9 テラ(tera) T 1000 4 =10 12 ペタ(peta) P 1000 5 =10 15 エクサ(exa) E 1000 6 =10 18 ゼタ(zetta) Z 1000 7 =10 21 ヨタ(yotta) Y 1000 8 =10 24
40 2 進 接 頭 辞 (IEC/IEEE) 名 前 記 号 乗 数 キビ(kibi) Ki 1024 1 =2 10 メビ(mebi) Mi 1024 2 =2 20 ギビ(gibi) Gi 1024 3 =2 30 テビ(tebi) Ti 1024 4 =2 40 ペビ(pebi) Pi 1024 5 =2 50 エクスビ(exbi) Ei 1024 6 =2 60 ゼビ(zebi) Zi 1024 7 =2 70 ヨビ(yobi) Yi 1024 8 =2 80
教 科 書 pp.50-55. 41 b bit 2 進 数 1 桁 bit と byte 通 信 速 度 や IC の 容 量 表 記 等 例 B Byte 100Mbps (100 Mega bits per seconds) 8bit ( 半 角 英 数 1 文 字 分 に 相 当 ) 記 憶 メディアの 容 量 表 記 等 例 32GB (32 Giga Bytes) 1bit 0 1 0 0 0 1 1 0 1 1 1bitの 記 憶 素 子 には 2 進 数 の1 桁 つまり 0 または 1 のみ 記 憶 できる 1bit 毎 では 単 位 が 小 さ 過 ぎて 使 い 辛 い 通 常 は 8 桁 を1まとめにして 扱 う 8bit = 1byte 8bit = 1byte は 2 8 = 256 通 りの 整 数 を 表 現 可 能 符 号 なし 0~255 符 号 あり 128~127
教 科 書 pp.50-55. 42 16 進 数 2 進 数 10 進 数 16 進 数 2 進 数 10 進 数 16 進 数 0b0000 0 0x0 0b1000 8 0x8 0b0001 1 0x1 0b1001 9 0x9 0b0010 2 0x2 0b1010 10 0xa 0b0011 3 0x3 0b1011 11 0xb 0b0100 4 0x4 0b1100 12 0xc 0b0101 5 0x5 0b1101 13 0xd 0b0110 6 0x6 0b1110 14 0xe 0b0111 7 0x7 0b1111 15 0xf 2 進 数 4 桁 16 進 数 1 桁 に 対 応 2 進 数 から 変 換 するとキリが 良 い バイト 単 位 のデータを 表 す 際 読 み 易 い 例 0b0001001000110100 = 4660 = 0x1234 2 進 数 4 桁 16 進 数 1 桁 2 進 数 8 桁 16 進 数 2 桁 2 進 数 16 桁 16 進 数 4 桁 2 進 数 32 桁 16 進 数 8 桁 2 進 数 64 桁 16 進 数 16 桁
教 科 書 pp.50-55. 43 8 bit 整 数 の N 進 数 の 表 現 2 進 数 符 号 なし10 進 数 符 号 あり10 進 数 16 進 数 0b00000000 0 0 0b00000001 1 1 0x01 0b00000010 2 2 0x02 0b00000011 3 3 0x03 0b01111111 127 127 0x7f 0b10000000 128-128 0x80 0b11111100 252-4 0xfc 0b11111101 253-3 0xfd 0b11111110 254-2 0xfe 0b11111111 255-1 0xff 符 号 ありは ここで 正 負 が 入 れ 替 わる 符 号 あり 整 数 の 場 合 は 最 上 位 ビットを 符 号 ビットとして 扱 う(2の 補 数 表 現 )
教 科 書 pp.50-55. 44 16 bit 整 数 の N 進 数 の 表 現 2 進 数 符 号 なし10 進 数 符 号 あり10 進 数 16 進 数 0b0000000000000000 0 0 00 0b0000000000000001 1 1 01 0b0000000000000010 2 2 02 0b0000000000000011 3 3 03 0b0111111111111111 32767 32767 0x7fff 0b1000000000000000 32768-32768 0x8000 0b1111111111111100 65532-4 0xfffc 0b1111111111111101 65533-3 0xfffd 0b1111111111111110 65534-2 0xfffe 0b1111111111111111 65535-1 0xffff 符 号 ありは ここで 正 負 が 入 れ 替 わる 符 号 あり 整 数 の 場 合 は 最 上 位 ビットを 符 号 ビットとして 扱 う(2の 補 数 表 現 )
45 N bit 整 数 の 最 大 値 最 小 値 Bit 数 符 号 あり10 進 数 最 小 値 符 号 あり10 進 数 最 大 値 符 号 なし10 進 数 最 大 値 8-128 127 255 16-32,768 32,767 65,535 32-2,147,483,648 2,147,483,647 4,294,967,295 64-9,223,372,036,854,775,808 9,223,372,036,854,775,807 18,446,744,073,709,551,615 N 2 N 1 2 N 1 1 2 N 1 参 考 128bit の 場 合 Bit 数 128 符 号 あり10 進 数 最 小 値 170,141,183,460,469,231,731,687,303,715,884,105,727 符 号 あり10 進 数 最 大 値 -170,141,183,460,469,231,731,687,303,715,884,105,728 符 号 なし10 進 数 最 大 値 340,282,366,920,938,463,463,374,607,431,768,211,456
46 符 号 なし8bit 整 数 の 演 算 整 数 オーバーフロー 11111111 = 255 +)00000001 = 1 100000000 = 0 有 効 桁 の 外 に1が 溢 れた 整 数 アンダーフロー 100000000 = 0 -)00000001 = 1 11111111 = 255 有 効 桁 外 の 外 から1が 溢 れた
47 符 号 あり8bit 整 数 の 演 算 整 数 オーバーフロー 01111111 = 127 +)00000001 = 1 10000000 = -128 符 号 ビットに1が 溢 れた 整 数 アンダーフロー 10000000 = -128 -)00000001 = 1 01111111 = 127 符 号 ビットから1が 溢 れた 2の 補 数 表 現 有 効 桁 の 外 から1を 借 りてくる 100000000 = 0 -)00000001 = 1 11111111 = -1 11111111 = -1 +)00000001 = 1 100000000 = 0 有 効 桁 の 外 に1を 捨 てる
48 RAM (Random Access Memory) コンピュータのメインメモリで 利 用 されている
教 科 書 pp.52-56. 49 メモリの 構 成 1byte 単 位 でアドレスが 振 られている つまり 各 アドレスには1byteの 値 を 格 納 出 来 る 32bitのOSは32bitのアドレス 空 間 最 大 2 32 Bytes=4GiB 64bitのOSは64bitのアドレス 空 間 最 大 2 64 Bytes=16EiB 000000 00000000000000 000001 00000000000001 000002 00000000000002 000003 00000000000003 0xffffffff 0xffffffffffffffff アドレス 格 納 値 アドレス 格 納 値
50 大 きい 値 の 扱 い 方 複 数 のアドレスをまとめて 変 数 に 割 り 当 てる 0x~00 0x~01 0x~02 0x~03 0x~04 0x~05 0x~06 0x~07 0x~08 8bit 0x~00 0x~01 0x~02 0x~03 0x~04 0x~05 0x~06 0x~07 0x~08 16bit
51 大 きい 値 の 扱 い 方 複 数 のアドレスをまとめて 変 数 に 割 り 当 てる 0x~00 0x~01 0x~02 0x~03 0x~04 0x~05 0x~06 0x~07 0x~08 32bit 0x~00 0x~01 0x~02 0x~03 0x~04 0x~05 0x~06 0x~07 0x~08 64bit
教 科 書 pp.59-61. 52 変 数 の 宣 言 値 の 代 入 変 数 は 値 を 格 納 する 箱 のようなもの int a; // (1) 変 数 の 宣 言 a = 10; // (2) 値 の 代 入 // (3) (1) (2) 10 (3)? a? a 10 a int 型 の 変 数 を 作 り a という 名 前 を 付 ける この 時 点 では 中 身 は 未 定 変 数 a に 10 を 代 入 する 変 数 a に 10 が 代 入 された 状 態 に なっている
教 科 書 pp.59-61. 53 変 数 の 宣 言 と 初 期 化 宣 言 と 同 時 に 初 期 化 することも 出 来 る int a = 10; // (1) 変 数 の 宣 言 と 初 期 化 (1) 10 a int 型 の 変 数 を 作 り a という 名 前 を 付 け 10 を 代 入 する
54 変 数 への 値 の 代 入 変 数 への 代 入 は = を 用 います C 言 語 にお いて = は イコール や 等 号 ではなく 代 入 を 意 味 する 記 号 です 代 入 は 右 辺 の 計 算 結 果 を 左 辺 の 変 数 に 格 納 します ( 左 辺 には 必 ず 単 独 の 変 数 を 書 く) a = 10; // (1) 値 の 代 入 a = a + 1; // (2) 計 算 結 果 の 代 入 (2) 10 a 計 算 結 果 で 左 辺 を 上 書 きする 10 a + 1 まず 右 辺 を 計 算 して
教 科 書 pp.59-61. 55 変 数 文 法 データ 型 変 数 名 ; // 変 数 の 宣 言 データ 型 変 数 名 = 初 期 代 入 値 ; // 変 数 の 宣 言 と 初 期 化 データ 型 変 数 名 1, 変 数 名 2; // 複 数 の 変 数 の 宣 言 データ 型 変 数 名 1= 初 期 代 入 値 1, 変 数 名 2= 初 期 代 入 値 2; // 複 数 の 変 数 の 宣 言 と 初 期 化 変 数 名 = 値 ; // 値 の 代 入
教 科 書 p.54. 56 リテラル ソースコードに 直 接 記 述 された 値 数 値 文 字 列 等 wavetest.c 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 int main(int argc, char *argv[]) { if (argc < 4) { printf("usage %s output_file micro_sec MIDI_note_No n n", argv[0]); return EXIT_FAILURE; } } FILE *fp; if (fp = fopen(argv[1], "wb")) { fwrite_wav(44100, atoi(argv[2]), atoi(argv[3]), fp); fclose(fp); } return EXIT_SUCCESS; 赤 字 で 示 したような 部 分 が リテラルに 当 たる
教 科 書 pp.53-55., [1] pp.44-45. 57 整 数 のデータ 型 signed char, unsigned char 1バイト 局 所 的 な 文 字 セット 内 に1 文 字 を 保 持 し 得 る signed short, unsigned short 少 なくとも16ビット signed int, unsigned int 少 なくとも16ビット 通 常 ホスト 計 算 機 の 自 然 な 整 数 サイズ 現 在 は 32 or 64 ビットであることが 多 い signed long, unsigned long 少 なくとも32ビット 明 確 にビット 数 は 定 められていない 割 り 当 てビット 数 の 大 小 関 係 は short <= int <=long 型 の 前 に signed を 付 けると 符 号 ありの 型 になる 通 常 signed は 省 略 する( 書 かない) 型 の 前 に unsigned を 付 けると 符 号 なしの 型 になる コンパイルする 環 境 により 使 える 値 の 最 大 値 最 小 値 が 異 なる!
教 科 書 pp.53-55., [1] pp.44-45. 58 整 数 のデータ 型 サイズ 符 号 あり 符 号 なし 備 考 1バイト signed char unsigned char 主 に 文 字 文 字 列 バイナリデータ 用 16bit 以 上 signed short unsigned short 16bit 以 上 signed int unsigned int 通 常 はこれを 使 う 32bit 以 上 signed long unsigned long
59 整 定 数 のリテラル 何 も 指 定 しないと int 型 末 尾 に 接 尾 子 (U, L)を 付 けると 型 指 定 される int i = 1234; // int 型 long l = 1234L; // long 型 unsigned int ui = 1234U; // unsigned int 型 unsigned long ul = 1234UL; // unsigned long 型
教 科 書 p.54. 60 C 言 語 のN 進 数 リテラル 0b~ 2 進 数 リテラル(C++14の 仕 様 *1) 0~ 0x~ 8 進 数 リテラル 16 進 数 リテラル *1 少 なくとも gcc4.3, Clang3.2 では 実 装 済 み 古 いコンパイラでは2 進 数 リテラルは 使 えない 例 えばBorland C++ で 0b~ は 使 えない 2015-04-25 追 加 int dec = 100; // 10 進 数 の100 int bin = 0b100; // 2 進 数 の100=10 進 数 の 4 int oct = 0100; // 8 進 数 の100=10 進 数 の 64 int hex = 0x100; // 16 進 数 の100=10 進 数 の256
61 演 習 値 を 表 示 してみよう(1/2) printf の1つ 目 の 引 数 に "%d n" を 与 え 2つ 目 の 引 数 に 前 のページの dec, bin, oct, hex を 与 えてみよう ファイルは dec, bin, oct, hex の4つ 作 る 1 2 3 4 5 6 7 printf_practice_hex.c #include <stdio.h> void main() { int hex = 0x100; printf("%d n", hex); } 5,6 行 目 を 書 き 変 えて 計 4つのファイルを 作 りましょう mintty + bash + gcc $ gcc printf_practice_hex.c &&./a 256 コマンドプロンプト + Borland C++ >bcc32 printf_practice_hex.c && printf_practice_hex Borland C++ 5.5.1 for Win32 Copyright (c) 1993,... printf_practive_11.c Turbo Incremental Link 5.00 Copyright (c) 1997,... 256
教 科 書 pp.55-56. 62 浮 動 小 数 点 数 のデータ 型 float double long double 単 精 度 浮 動 小 数 点 数 倍 精 度 浮 動 小 数 点 数 拡 張 精 度 の 浮 動 小 数 点 数
教 科 書 pp.55-56. 63 浮 動 小 数 点 数 とは IEEE754 http//ja.wikipedia.org/wiki/ieee_754 以 下 のようなに 表 現 する 方 法 ± 仮 数 部 2 指 数 部 ビット 数 符 号 指 数 部 仮 数 部 単 精 度 32bit 1bit 8bit 23bit 倍 精 度 64bit 1bit 11bit 53bit 四 倍 精 度 128bit 1bit 15bit 112bit 指 数 部 の 値 で 小 数 点 の 位 置 が 移 動 するので 浮 動 小 数 点 と 呼 ばれる
64 浮 動 小 数 点 数 定 数 のリテラル 何 も 指 定 しないと double 型 末 尾 に 接 尾 子 (F, L)を 付 けると 型 指 定 される 1.234E5 のような 書 き 方 も 出 来 る( 指 数 表 現 ) これは1.234 10 5 を 意 味 する float f = 1234F; // float 型 double d = 1234; // double 型 long double ld = 1234L; // long double 型 double e = 1.234E5; // double 型 の 123400
備 考 2015-04-25 追 加 65 固 定 小 数 点 数 10 進 数 8 桁 を4 桁 ずつに 分 けた 例 10 3 10 2 10 1 10 0. 10 1 10 2 10 3 10 4 の 桁 1 2 3 4. 5 6 7 8 0000.0000~9999.9999 まで 表 現 可 能 2 進 数 も8 桁 も 同 様 に4 桁 ずつに 分 けてみる 2 3 2 2 2 1 2 0. 2 1 2 2 2 3 2 4 の 桁 0 0 0 1. 1 0 1 1 0b0000.0000~0b1111.1111 まで 表 現 可 能
備 考 2015-04-25 追 加 指 数 表 示 ( 浮 動 小 数 点 数 ) 66 10 進 数 8 桁 を4 桁 ずつに 分 けた 例 10 3 10 2 10 1 10 0 10 3 10 2 10 1 10 0 の 桁 1 2 3 4 10^ 1 2 3 4 0000 10^0000~9999 10^9999 まで 表 現 可 能 2 進 数 も8 桁 も 同 様 に4 桁 ずつに 分 けてみる 2 3 2 2 2 1 2 0 2 3 2 2 2 1 2 0 の 桁 0 0 0 1 2^ 0 0 0 1 0b0000 2^0b0000~0b1111 2^0b1111 まで 表 現 可 能
教 科 書 p.51. 67 ASCII 文 字 コード 表 上 位 4 ビ ッ ト 下 位 4ビット 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI 1 DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC 2 SP! " # $ % & ' ( ) * +, -. / 3 0 1 2 3 4 5 6 7 8 9 ; < = >? 4 @ A B C D E F G H I J K L M N O 5 P Q R S T U V W X Y Z [ ] ^ _ 6 ` a b c d e f g h i j k l m n o 7 p q r s t u v w x y z { } ~ DEL 8 9 A B C D E F http//ja.wikipedia.org/wiki/ascii 赤 字 は 制 御 コード
教 科 書 p.51. 制 御 コード 68 HEX Abbr ctrl eseq Name Hex Abbr ctrl eseq Name NUL ^@ 0 Null 0x10 DLE ^P Data Link Escape 0x01 SOH ^A Start of Heading 0x11 DC1 ^Q Device Control 1 0x02 STX ^B Start of Text 0x12 DC2 ^R Device Control 2 0x03 ETX ^C End of Text 0x13 DC3 ^S Device Control 3 0x04 EOT ^D End of Transmission 0x14 DC4 ^T Device Control 4 0x05 ENQ ^E Enquiry 0x15 NAK ^U Negative Acknowledgement 0x06 ACK ^F Acknowledgement 0x16 SYN ^V Synchronous idle 0x07 BEL ^G a Bell 0x17 ETB ^W End of Transmission Block 0x08 BS ^H b Back Space 0x18 CAN ^X Cancel 0x09 HT ^I t Horizontal Tab 0x19 EM ^Y End of Medium 0x0a LF ^J n Line Feed 0x1a SUB ^Z Substitute 0x0b VT ^K v Vertical Tab 0x1b ESC ^[ e Escape 0x0c FF ^L f Form Feed 0x1c FS ^ File Separator 0x0d CR ^M r Carriage Return 0x1d GS ^] Group Separator 0x0e SO ^N Shift Out 0x1e RS ^^ Record Separator 0x0f SI ^O Shift In 0x1f US ^_ Unit Separator 0x20 SP Space 0x7f DEL ^? Delete
教 科 書 p.56. 69 文 字 定 数 のリテラル 1 文 字 を 単 一 の 引 用 符 (')で 囲 む char 型 の 値 になる 単 一 の 引 用 符 (')は Shift + ' 7 char a = 'a'; // a の 文 字 コード0x61 char lf = ' 012'; // 改 行 の 文 字 コード0x0aを8 進 数 で char vt = ' x0b'; // 垂 直 タブの 文 字 コード0x0bを16 進 数 で char cr = ' r'; // 復 帰 の 文 字 コード0x0dを //エスケープシーケ1ンスで
2015-04-25 追 加 70 演 習 値 を 表 示 してみよう3(1/2) printf_practice_hex.c を 元 にして 以 下 の 点 を 変 更 して 動 作 を 確 認 せよ ファイル 名 をコピーして 以 下 の4ファイルを 通 る printf_practice_a.c printf_practice_lf.c printf_practice_vt.c printf_practice_cr.c
2015-04-25 追 加 71 演 習 値 を 表 示 してみよう3(2/2) 5 行 目 はファイル 名 と 対 応 させて2ページ 前 の a, lf, vt, cr の 宣 言 と 初 期 化 に 書 き 換 え 6 行 目 は %d を %x に 書 き 換 え hex は 対 応 する a, lf, vt, cr に 書 き 換 え 1 2 3 4 5 6 7 printf_practice_a.c #include <stdio.h> void main() { char a = 'a'; printf("%x n", a); } 5,6 行 目 の 赤 字 部 分 を 書 き 変 え 計 4つのファイルを 作 りましょう mintty + bash + gcc $ gcc printf_practice_a.c &&./a 61 コマンドプロンプト + Borland C++ >bcc32 printf_practice_a.c && printf_practice_a Borland C++ 5.5.1 for Win32 Copyright (c) 1993,... printf_practive_11.c Turbo Incremental Link 5.00 Copyright (c) 1997,... 61
教 科 書 p.56. 72 エスケープシーケンス a 警 告 (ベル) 文 字 b バックスペース f 改 頁 (フォームフィード) n 改 行 r 復 帰 t 水 平 タブ v 垂 直 タブ これらの 表 記 は 1 文 字 (=1バイト)の 値 を 表 す バックスラッシュ? 疑 問 符 ' 単 一 引 用 符 " 二 重 引 用 符 ooo 8 進 数 ooo (*1) xhh 16 進 数 hh (*2) (*1) ooo は1 桁 ないし 3 桁 の8 進 数 を 取 る (*2) hh は1 桁 あるいは 2 桁 の16 進 数 を 取 る
備 考 73 幅 広 文 字 定 数 のリテラル char 型 では 表 せない 拡 張 文 字 セット 用 文 字 定 数 の 前 に L を 付 ける wchar_t 型 の 値 になる wchar_t hira_a = L'あ'; // あ の 文 字 コードU+3043? Wikipedia / JIS_X_0213 非 漢 字 一 覧 #1 面 4 区 http//ja.wikipedia.org/wiki/jis_x_0213 非 漢 字 一 覧 #1.E9.9D.A24.E5.8C.BA
教 科 書 pp.44, 96-99. 74 文 字 列 定 数 のリテラル 0 個 以 上 の 文 字 を 二 重 引 用 符 (")で 囲 む char 型 の 配 列 になる( 後 述 ) 二 重 引 用 符 (")は Shift " + 2 char emp[] = ""; // 空 の 文 字 列 char str[] = "I am a string"; // 文 字 列 char cat[] = "hello, " "world"; // "hello, world" と 同 じ // 連 続 した 文 字 定 数 リテラルはコンパイル 時 に 連 結 される
75 宿 題 次 回 までに 以 下 の 事 をやっておくこと 教 科 書 の 第 2 章 の 終 わりまで 読 み 指 示 された 操 作 を 試 して 動 作 を 確 認 する 不 明 な 点 疑 問 点 についてメモし 次 回 の 授 業 に 持 参 する または 本 講 義 の Moodle コース 上 に ある 第 1 週 宿 題 用 フォーラムに 書 き 込 んでおく