プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/clangi2015/clangi2015... ·...

75
C言語入門 第2週 プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。) 1

Upload: others

Post on 08-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

C言語入門 第2週

プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ,

情報処理言語Ⅰ(実習を含む。)

1

Page 2: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

先週の復習1

explorer の使い方

2

Page 3: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

explorer.exe

• ファイルの操作を行うソフト

• デスクトップもエクスプローラーの一部

ここに「explorer」と入力し ENTERキーを叩いても

explorer が表示できます

これが「explorer」 デスクトップも「explorer」

コントロールパネルも 「explorer」

3

Page 4: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

ポップアップ(popup)メニューの表示

• 表示させたい場所でマウス右クリック

• 例えばデスクトップの何もない場所で

• メニューの右にある三角印

• サブメニューが出る

ポップアップメニュー

サブメニュー

4

Page 5: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

ファイルの作成とオープン

• explorer の

• 作成したい場所で マウス右クリック

• ポップアップメニューが出る

• 新規作成→テキストドキュメント

• 出来たファイルは 適当に名前を付けても良い

• マウス左ダブルクリック →メモ帳で開かれる

5

Page 6: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

フォルダの作成

• 作成したい所で右クリック

• ポップアップメニューで

• →新規作成

• →フォルダ

• 「新しいフォルダ」ができた

6

Page 7: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

フォルダを開く

• フォルダアイコンの上で左ダブルクリック

• explorer が開く

開いているフォルダ名

7

Page 8: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

ファイルの移動

• 「テキストドキュメント」を

• 「新しいフォルダ」の中に移動

• 「ドラッグ&ドロップ」すれば良い

ドラッグ&ドロップ 移動しました

8

Page 9: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

ファイルのコピー

• Ctrl を押したまま 「ドラッグ&ドロップ」

コピーができました

9

Page 10: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

ファイルの選択

• ファイルを単純にクリック

• ファイル左側のチェックボックスをクリック

• CTRL キーを押したままクリック(複数選択)

• ファイルを囲むようにドラッグ(複数選択)

選択された

10

Page 11: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

ファイルの削除

• 選択したファイル上で右クリック

• →削除

• ファイルを選択して「Delete」キーでも良い

ファイルが消えた

11

Page 12: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

CUI作業環境 (端末: terminal)

• フォルダをSHIFT+右クリック

コマンドプロンプト

mintty + bash

12

右クリックしたフォルダを作業ディレクトリにして 端末(コマンドプロンプトやmintty)が開かれる

Page 13: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

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 ディレクトリ目

13

Page 14: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

cmd と bash の主なキー操作コマンド

14

cmd bash 動作

行頭へ移動

行末へ移動

行末まで削除

ファイル名の補完

コマンド履歴の再利用

tab |← →|

Home

END

Ctrl K

+ Shift End +

Ctrl E

+

Ctrl A

+

Page 15: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

ファイルの場所の記述方法(パス)

• 以下の図のフォルダ構成を仮定する

教科書 pp.30-31. 15

C:

Users

kou

Desktop

CLangI CLangII

week01 week01

hello.c hellogui.c

作業フォルダは CLangI

Page 16: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

作業フォルダ

• カレントディレクトリ(current directory)とも言う

ここに表示されているのが 作業フォルダ

16

コマンドプロンプト

mintty + bash

Page 17: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

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

教科書 pp.30-31. 17

Page 18: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

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

18

Page 19: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

特別なフォルダ名

• 「..」

• 1つ親のディレクトリを意味する

• 「.」

• 現在のディレクトリを意味する

• UNIX では実行ファイルの検索パスに作業ディレクトリが含まれない

• 作業ディレクトリ内にある実行ファイルを実行する際 ./ を実行ファイル名の前に付ける必要がある

19

Page 20: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

補足

• フォルダとディレクトリは同じ概念 • Windows 流ではフォルダと呼ぶ • UNIX 流ではディレクトリと呼ぶ

• /cygdrive は cygwin 特有の仮想ディレクトリ • Windows のドライブが配置されている • 通常 UNIX ではパスに : (コロン)を使わないため

• ネットワークドライブもアクセス出来る • UNC 表記を用いる • ¥¥fs.cc.yamaguchi-u.ac.jp¥YUアカウント名 • //fs.cc.yamaguchi-u.ac.jp/YUアカウント名

20

Page 21: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

コマンドの検索パス

• 環境変数 PATH に設定されたパスからコマンドを探して実行する

• cmd での確認方法

• 複数のパスは ; (セミコロン)で区切って与える

• bash での確認方法

• 複数のパスは : (コロン)で区切って与える

> echo %PATH%

$ echo $PATH

21

Page 22: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

ファイル拡張子の表示 Windows 8 以降

• explorer.exe から 「表示」→「ファイル名拡張子」→ON

ファイル名末尾に .○○○と表示される

教科書 p.27. 22

Page 23: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

ファイル拡張子の表示 Windows 7 以前

• explorer.exe から

• 「Alt」→「ツール」→「オプション」→「表示」 →「登録されている拡張子は表示しない」→OFF

Alt叩くとメニュー出る

ファイル名末尾に .○○○と出る

教科書 p.27. 23

Page 24: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

ファイル拡張子とは?

• ファイルの種類を表している • アプリケーションとの関連付けに用いられる

• 実行ファイルは .exe や .com • テキスト文書は .txt • Word2007以降は .docx それより前は .doc • Excel2007以降は .xlsx それより前は .xls • PowerPoint2007以降は .pptx それより前は .ppt • 圧縮ファイルは .zip .lzh .tgz .cab 等々 • 等々

• 変更すると開けなくなる • 普通は変更する必要はない • メール等で添付されて来たファイルには注意

• 文書ファイルに見えて実行ファイル(実はウィルス)ということも

24

Page 25: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-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

ファイル一覧の表示

コンパイル

ファイル一覧の表示

作成した実行ファイルを実行

教科書 pp.36-42. 25

Page 26: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

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進表現

教科書 p.17. 26

Page 27: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

C コンパイラは何をしているのか?

• .text セクション部分 セクション .text の逆アセンブル: ... 00000001004010d0 <main>: #include <stdio.h> 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 ...

アセンブラコードを アセンブルして得られた マシン語のバイトコード

C言語を コンパイルして得られた アセンブラコード

配置アドレス

27

元々の C言語のコード

文字データ"hello, world¥n"の 配置アドレス(前項参照)

サブルーチン(printf)の 呼び出し

Page 28: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

C言語入門(変数と定数)

28

Page 29: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

基礎知識

29

Page 30: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

テキスト編集系ソフトの種類

• テキストエディタ (メモ帳, 秀丸, etc,,,)

• 基本的にプレーンな文字情報のみ、装飾なし

• リッチテキストエディタ (ワードパッド, etc,,,)

• 字体、色、サイズ等の装飾が可能に

• ワードプロセッサ (Word, 一太郎, etc,,,)

• 更に高度な、文書作成支援機能

• DTPツール (InDesign, Publisher, etc,,,)

• 印刷用の版下作成、特に割付へ特化

30

Page 31: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

プログラミング向け テキストエディタの機能

• 構文解析機能

• シンタックスハイライト機能

• 行番号表示機能

• 入力補完機能

• マクロ機能

• 正規表現対応の検索機能

• タグジャンプ機能

• 等々

31

Page 32: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

テキストエディタ

• 窓の杜 • オフィス / 文書作成 / テキストエディター • 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/

32

Page 34: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

統合開発環境

• Microsoft Visual Studio

• http://www.visualstudio.com/ja-jp/

• Eclipse

• Pleiades - Eclipse プラグイン日本語化プラグイン

• http://mergedoc.sourceforge.jp/

• NetBeans

• https://ja.netbeans.org/

34

Page 35: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

コメント

• プログラムとしては解釈されない

• 後で読む人用に注釈をしておく機能

• /* ~ */ の間がコメント

• // から行末までがコメント

教科書 p.46. 35

comment_test.c #include <stdio.h> main() { /* ここがコメント */ printf("hello, world¥n"); // ここもコメント }

1 2 3 4 5 6 7 8 9

緑の部分がコメントとして 扱われる

Page 36: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

printf 関数の初歩

• 括弧の中にカンマ「,」で区切って複数の引数(パラメータ)を与える。

• 1つ目の引数は書式

• 書式内の %d %f %s 等の箇所には2つ目以降の引数が順に埋め込まれる

36

printf("1 + 2 = %d¥n", 1 + 2);

1 + 2 = ¥n

ここには int 型の整数型データとして解釈した 2つ目の引数の値(上記の例では1+2の計算結果)が 符号付き10進数にして印字される

教科書 pp.61, 64-66, 98.

¥n は改行として機能する

%d は整数、 %f は実数、 %s は文字列の埋め込み用

Page 37: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

演習: 値を表示してみよう(1/2)

• printf の1つ目の引数に "%d¥n", "%f¥n", "%s¥n" を与え、2つ目の引数に、整数、実数、

文字列を与えて、それぞれの組み合わせで、どうなるか試してみよう。

37

printf_practice_11.c #include <stdio.h> void main() { printf("%d¥n", 123); }

1 2 3 4 5 6

コマンドプロンプト + 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

mintty + bash + gcc $ gcc printf_practice_11.c && ./a 123

5行目を書き変えて 計9つのファイルを作りましょう。

Page 38: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

演習: 値を表示してみよう(2/2)

38

• 結果を調べて表にまとめてみよう。

• ファイル名は整理番号を用いて 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

Page 39: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

SI接頭辞

名前 記号 乗数

キロ(kilo) K 10001 =103

メガ(mega) M 10002=106

ギガ(giga) G 10003=109

テラ(tera) T 10004=1012

ペタ(peta) P 10005=1015

エクサ(exa) E 10006=1018

ゼタ(zetta) Z 10007=1021

ヨタ(yotta) Y 10008=1024

39

Page 40: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

2進接頭辞(IEC/IEEE)

名前 記号 乗数

キビ(kibi) Ki 10241=210

メビ(mebi) Mi 10242=220

ギビ(gibi) Gi 10243=230

テビ(tebi) Ti 10244=240

ペビ(pebi) Pi 10245=250

エクスビ(exbi) Ei 10246=260

ゼビ(zebi) Zi 10247=270

ヨビ(yobi) Yi 10248=280

40

Page 41: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

bit と byte

• b – bit

• 2進数 1 桁

• 通信速度や IC の容量表記等

• 例: • 100Mbps (100 Mega bits per seconds)

• B – Byte

• 8bit (半角英数1文字分に相当)

• 記憶メディアの容量表記等

• 例: • 32GB (32 Giga Bytes)

0

1

1bitの記憶素子には 2進数の1桁つまり 0 または 1 のみ 記憶できる

0 0 0 1 1 0 1 1

1bit毎では 単位が小さ過ぎて使い辛い 通常は 8桁を1まとめにして扱う

1bit

8bit = 1byte

8bit = 1byte は 28 = 256 通りの整数を表現可能 符号なし: 0~255 符号あり: −128~127

教科書 pp.50-55. 41

Page 42: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

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進数 8桁 → 16進数 2桁 2進数16桁 → 16進数 4桁 2進数32桁 → 16進数 8桁 2進数64桁 → 16進数16桁

2進数 4桁 → 16進数 1桁 に対応 2進数から変換するとキリが良い バイト単位のデータを表す際、読み易い 例: 0b0001001000110100 = 4660 = 0x1234

教科書 pp.50-55. 42

Page 43: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

8 bit 整数の N 進数の表現 2進数 符号なし10進数 符号あり10進数 16進数

0b00000000 0 0 0x00

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.

符号ありは ここで 正負が 入れ替わる

43

Page 44: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

16 bit 整数の N 進数の表現 2進数 符号なし10進数 符号あり10進数 16進数

0b0000000000000000 0 0 0x0000

0b0000000000000001 1 1 0x0001

0b0000000000000010 2 2 0x0002

0b0000000000000011 3 3 0x0003

: : : :

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の補数表現)

符号ありは ここで 正負が 入れ替わる

教科書 pp.50-55. 44

Page 45: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

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

𝑁 −2𝑁−1 2𝑁−1 − 1 2𝑁 − 1

45

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

参考: 128bit の場合

Page 46: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

符号なし8bit整数の演算

• 整数オーバーフロー

11111111 = 255

+)00000001 = 1

100000000 = 0

• 整数アンダーフロー

100000000 = 0

-)00000001 = 1

11111111 = 255

有効桁の外に1が溢れた

有効桁外の外から1が溢れた

46

Page 47: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

符号あり8bit整数の演算

• 整数オーバーフロー

01111111 = 127

+)00000001 = 1

10000000 = -128

• 整数アンダーフロー

10000000 = -128

-)00000001 = 1

01111111 = 127

• 2の補数表現

100000000 = 0

-)00000001 = 1

11111111 = -1

11111111 = -1

+)00000001 = 1

100000000 = 0

有効桁の外から1を借りてくる

有効桁の外に1を捨てる

符号ビットに1が溢れた

符号ビットから1が溢れた

47

Page 48: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

RAM (Random Access Memory)

• コンピュータのメインメモリで利用されている

48

Page 49: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

メモリの構成

• 1byte単位でアドレスが振られている

• つまり各アドレスには1byteの値を格納出来る

0x00 0x00000000

0x00 0x00000001

0x00 0x00000002

0x00 0x00000003

0x00 0xffffffff

: :

: :

0x00 0x0000000000000000

0x00 0x0000000000000001

0x00 0x0000000000000002

0x00 0x0000000000000003

0x00 0xffffffffffffffff

: :

: :

32bitのOSは32bitのアドレス空間 最大232Bytes=4GiB

64bitのOSは64bitのアドレス空間 最大264Bytes=16EiB

アドレス 格納値 アドレス 格納値

教科書 pp.52-56. 49

Page 50: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

大きい値の扱い方

• 複数のアドレスをまとめて変数に割り当てる

0x00 0x~00

0x00 0x~01

0x00 0x~02

0x00 0x~03

: :

: :

0x00 0x~04

0x00 0x~05

0x00 0x~06

: :

: :

0x00 0x~07

0x00 0x~08

8bit 0x00 0x~00

0x00 0x~01

0x00 0x~02

0x00 0x~03

: :

: :

0x00 0x~04

0x00 0x~05

0x00 0x~06

: :

: :

0x00 0x~07

0x00 0x~08

16bit

50

Page 51: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

大きい値の扱い方

• 複数のアドレスをまとめて変数に割り当てる

0x00 0x~00

0x00 0x~01

0x00 0x~02

0x00 0x~03

: :

: :

0x00 0x~04

0x00 0x~05

0x00 0x~06

: :

: :

0x00 0x~07

0x00 0x~08

32bit

0x00 0x~00

0x00 0x~01

0x00 0x~02

0x00 0x~03

: :

: :

0x00 0x~04

0x00 0x~05

0x00 0x~06

: :

: :

0x00 0x~07

0x00 0x~08

64bit

51

Page 52: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

変数の宣言、値の代入

• 変数は値を格納する箱のようなもの

int a; // (1) 変数の宣言 a = 10; // (2) 値の代入 // (3)

教科書 pp.59-61.

10

a

10

(1) (2)

a

?

a

?

(3)

int 型の変数を作り a という名前を付ける この時点では 中身は未定

変数 a に 10 を代入する

変数 a に 10 が 代入された状態に なっている

52

Page 53: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

変数の宣言と初期化

• 宣言と同時に初期化することも出来る

a

10

int a = 10; // (1) 変数の宣言と初期化

(1)

int 型の変数を作り a という名前を付け 10 を代入する

教科書 pp.59-61. 53

Page 54: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

変数への値の代入

• 変数への代入は「=」を用います。C言語において「=」は「イコール」や「等号」ではなく、「代入」を意味する記号です。

• 代入は、右辺の計算結果を左辺の変数に格納します。(左辺には必ず単独の変数を書く)

a = 10; // (1) 値の代入 a = a + 1; // (2) 計算結果の代入

1

(2)

a

10

a

10

計算結果で左辺を 上書きする

まず右辺を 計算して

54

+

Page 55: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

変数

• 文法

データ型 変数名; // 変数の宣言 データ型 変数名=初期代入値; // 変数の宣言と初期化 データ型 変数名1, 変数名2; // 複数の変数の宣言 データ型 変数名1=初期代入値1, 変数名2=初期代入値2; // 複数の変数の宣言と初期化 変数名 = 値; // 値の代入

教科書 pp.59-61. 55

Page 56: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

リテラル

• ソースコードに直接記述された値

• 数値、文字列等

教科書 p.54. 56

wavetest.c 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; }

64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

赤字で示したような部分が リテラルに当たる

Page 57: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

整数のデータ型

• 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.

コンパイルする環境により 使える値の最大値・最小値が 異なる!

57

Page 58: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

整数のデータ型

サイズ 符号あり 符号なし 備考

1バイト signed char unsigned char 主に文字、文字列、バイナリデータ用

16bit以上 signed short unsigned short

16bit以上 signed int unsigned int 通常はこれを使う

32bit以上 signed long unsigned long

教科書 pp.53-55., [1] pp.44-45. 58

Page 59: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

整定数のリテラル

• 何も指定しないと int 型

• 末尾に接尾子(U, L)を付けると型指定される

int i = 1234; // int 型 long l = 1234L; // long 型 unsigned int ui = 1234U; // unsigned int 型 unsigned long ul = 1234UL; // unsigned long 型

59

Page 60: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

C言語のN進数リテラル

• 0b~ 2進数リテラル(C++14の仕様*1)

• 0~ 8進数リテラル

• 0x~ 16進数リテラル

• *1: 少なくとも gcc4.3, Clang3.2 では実装済み

• 古いコンパイラでは2進数リテラルは使えない

• 例えばBorland C++ で 0b~ は使えない

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

教科書 p.54. 60

2015-04-25追加

Page 61: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

演習: 値を表示してみよう(1/2)

• printf の1つ目の引数に "%d¥n" を与え、2つ目の引数に、前のページの dec, bin, oct, hex を与えてみよう。

• ファイルは dec, bin, oct, hex の4つ作る。

61

printf_practice_hex.c #include <stdio.h> void main() { int hex = 0x100; printf("%d¥n", hex); }

1 2 3 4 5 6 7

コマンドプロンプト + 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

mintty + bash + gcc $ gcc printf_practice_hex.c && ./a 256

5,6行目を書き変えて 計4つのファイルを作りましょう。

Page 62: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

浮動小数点数のデータ型

• float 単精度浮動小数点数

• double 倍精度浮動小数点数

• long double 拡張精度の浮動小数点数

教科書 pp.55-56. 62

Page 63: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

浮動小数点数とは

• IEEE754

• http://ja.wikipedia.org/wiki/IEEE_754

• 以下のようなに表現する方法

±仮数部 × 2指数部

ビット数 符号 指数部 仮数部

単精度 32bit 1bit 8bit 23bit

倍精度 64bit 1bit 11bit 53bit

四倍精度 128bit 1bit 15bit 112bit

指数部の値で 小数点の位置が移動するので 浮動小数点と呼ばれる

教科書 pp.55-56. 63

Page 64: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

浮動小数点数定数のリテラル

• 何も指定しないと double 型

• 末尾に接尾子(F, L)を付けると型指定される

• 1.234E5 のような書き方も出来る(指数表現)

• これは1.234 × 105を意味する

float f = 1234F; // float 型 double d = 1234; // double 型 long double ld = 1234L; // long double 型 double e = 1.234E5; // double 型の 123400

64

Page 65: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

固定小数点数

• 10進数8桁を4桁ずつに分けた例

• 2進数も8桁も同様に4桁ずつに分けてみる

備考 65

1 2 3 4 . 5 6 7 8

103 102 101 100 . 10−1 10−2 10−3 10−4 の桁

0 0 0 1 . 1 0 1 1

23 22 21 20 . 2−1 2−2 2−3 2−4 の桁

2015-04-25追加

0000.0000~9999.9999 まで表現可能

0b0000.0000~0b1111.1111 まで表現可能

Page 66: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

指数表示(浮動小数点数)

• 10進数8桁を4桁ずつに分けた例

• 2進数も8桁も同様に4桁ずつに分けてみる

備考 66

1 2 3 4 ×10^ 1 2 3 4

103 102 101 100 103 102 101 100 の桁

2015-04-25追加

0 0 0 1 ×2^ 0 0 0 1

23 22 21 20 23 22 21 20 の桁

0000×10^0000~9999×10^9999 まで表現可能

0b0000×2^0b0000~0b1111×2^0b1111 まで表現可能

Page 67: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

ASCII文字コード表

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

上位4ビット

下位4ビット

赤字は制御コード

教科書 p.51.

http://ja.wikipedia.org/wiki/ASCII

67

Page 68: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

制御コード HEX Abbr ctrl eseq Name Hex Abbr ctrl eseq Name

0x00 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.51. 68

Page 69: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

文字定数のリテラル

• 1文字を単一の引用符(')で囲む

• char型の値になる

char a = 'a'; //「a」の文字コード0x61 char lf = '¥012'; //改行の文字コード0x0aを8進数で char vt = '¥x0b'; //垂直タブの文字コード0x0bを16進数で char cr = '¥r'; //復帰の文字コード0x0dを //エスケープシーケ1ンスで

教科書 p.56. 69

単一の引用符(')は

↑Shift '

7 +

Page 70: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

演習: 値を表示してみよう3(1/2)

• printf_practice_hex.c を元にして以下の点を変更して動作を確認せよ。

• ファイル名をコピーして以下の4ファイルを通る。

• printf_practice_a.c

• printf_practice_lf.c

• printf_practice_vt.c

• printf_practice_cr.c

70 2015-04-25追加

Page 71: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

演習: 値を表示してみよう3(2/2)

• 5行目はファイル名と対応させて2ページ前のa, lf, vt, cr の宣言と初期化に書き換え。

• 6行目は %d を %x に書き換え。hex は、対応する a, lf, vt, cr に書き換え

71

printf_practice_a.c #include <stdio.h> void main() { char a = 'a'; printf("%x¥n", a); }

1 2 3 4 5 6 7

コマンドプロンプト + 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

mintty + bash + gcc $ gcc printf_practice_a.c && ./a 61

5,6行目の赤字部分を書き変え 計4つのファイルを作りましょう。

2015-04-25追加

Page 72: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

エスケープシーケンス

¥a 警告(ベル)文字

¥b バックスペース

¥f 改頁(フォームフィード)

¥n 改行

¥r 復帰

¥t 水平タブ

¥v 垂直タブ

¥¥ バックスラッシュ

¥? 疑問符

¥' 単一引用符

¥" 二重引用符

¥ooo 8進数 ooo (*1)

¥xhh 16進数 hh (*2)

教科書 p.56.

(*1) ooo は1桁ないし 3桁の8進数を取る

(*2) hh は1桁あるいは 2桁の16進数を取る

これらの表記は、 1文字(=1バイト)の値を表す。

72

Page 74: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

文字列定数のリテラル

• 0個以上の文字を二重引用符(")で囲む

• char型の配列になる(後述)

二重引用符(")は

↑Shift "

2 +

char emp[] = ""; // 空の文字列 char str[] = "I am a string"; // 文字列 char cat[] = "hello, " "world"; // "hello, world" と同じ // 連続した文字定数リテラルはコンパイル時に連結される

教科書 pp.44, 96-99. 74

Page 75: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015... · 2015-04-25 · • 括弧の中にカンマ「,」で区切って複数の引数

宿題

• 次回までに以下の事をやっておくこと。

• 教科書の第2章の終わりまで読み、指示された操作を試して動作を確認する。

• 不明な点、疑問点についてメモし、次回の授業に持参する。または、本講義の Moodle コース上にある第1週宿題用フォーラムに書き込んでおく。

75