プログラマから見えるCPU 一番下のレベルでコンピュータ上のプログラムがど のように表現されているかを理解する プログラムがどう表現されているか プログラムはコンピュータのメモリ上に載っている コンピュータのメモリには数字しか格納できない したがってプログラムは数字である どう表現されているのか 数

Size: px
Start display at page:

Download "プログラマから見えるCPU 一番下のレベルでコンピュータ上のプログラムがど のように表現されているかを理解する プログラムがどう表現されているか プログラムはコンピュータのメモリ上に載っている コンピュータのメモリには数字しか格納できない したがってプログラムは数字である どう表現されているのか 数"

Transcription

1 計算機学 モデル計算機とソフトウェア

2 プログラマから見えるCPU 一番下のレベルでコンピュータ上のプログラムがど のように表現されているかを理解する プログラムがどう表現されているか プログラムはコンピュータのメモリ上に載っている コンピュータのメモリには数字しか格納できない したがってプログラムは数字である どう表現されているのか 数字で表現された 命令 機械語 CPUごとに異なる

3 コンピュータの構成 CPU ALU メモリ レジスタ キャッシュ バス I/O 周辺機器

4 コンピュータの構成 CPU 演算 データ転送のた めの数値の一時保存場 所 データの記憶領域 アドレス 番地 で管理 バス メモリとのデータ転送を 高速化 メモリ データの算術演算 論 理演算を行う レジスタ キャッシュ 計算やデータ転送 制 御などを司る ALU データを転送する経路 I/O 周辺機器との入出力イ ンタフェース

5 CPUアーキテクチャ CPUの設計方針及びインタフェースの総称 命令セットアーキテクチャ マイクロアーキテクチャ アドレス空間 データの処理単位の長さ 命令 の種類 機械語と命令の対応 レジスタの数や種類 レジスタや演算器 ALU の論理構成 キャッシュの構成や容量 システムアーキテクチャ 各部の実装方

6

7 CPUアーキテクチャの種類 CISC (Complex Instruction Set Computer) 1命令が複雑で高度な動作をする 回路は複雑 命令あたりの動作は遅い x86系cpuなど RISC (Reduced Instruction Set Computer) 1命令は単純な動作 回路は単純 命令あたりの動作は速い ARM, MIPSなど

8 モデルCPU COMET-II 情報処理技術者試験用CPU) 命令記述言語はCASL-IIと呼ばれる 16bit CPU (16bit/word) アドレス空間 64kword (128kbyte) レジスタ構成 SP (16) 8個の汎用レジスタ(GR) プログラムレジスタ(PR) スタックポインタ(SP) フラグ(FR) PR (16) FR (3) GR0 (16) GR1 (16) GR2 (16) GR3 (16) GR4 (16) GR5 (16) GR6 (16) GR7 (16)

9 CPUの動作 1.プログラムレジスタ(PR)に格納された数値をアドレ スとみなし そのアドレスのメモリに格納された数 値を取り出す 2.プログラムレジスタの値を1増やす 3.取り出した数値を 命令 とみなし 解読 4.解読した内容に応じた動作を行う 5.1に戻る

10 命令セット データ転送命令 算術演算 論理演算命令 比較演算命令 シフト演算命令 分岐命令 スタック操作命令 サブルーチン命令 その他

11 命令の形 命令 [オペランド] 例 LD GR1,#FF00,GR2 例 JNZ #001E オペランド 操作対象 の形 対象レジスタ1個 POP GR1 対象レジスタ2個 LD GR1, GR2 数値 アドレス JUMP #FF00 数値とレジスタ LAD GR0, 120 数値とレジスタ2個 ST GR0, #FF00, GR1

12 アドレッシングモード 例 LD GRx, 対象 LD GR0, GR1 GR0にGR1の内容を格納 LD GR0, #FF00 対象の内容をGRxに格納する アドレス FF00(16進)のメモリの内容をGR0に格納 LD GR0, #FF00, GR1 インデックス修飾 FF00(16進)にGR1の内容を加えた アドレスの内容をGR0に格納 右端のレジスタは GR1 GR7のみ

13 データ転送命令 レジスタとレジスタ レジスタとメモリの間でデータ を転送する LD GRx, {GRy アドレス アドレス, GRy} LAD GRx, {アドレス アドレス, GRy} 対象をGRxに転送 対象のアドレスそのものをGRxに格納 LAD GR0, #0010 ; GR0に16を格納 ST GRx, {アドレス アドレス, Gry} GRxの内容を指定したアドレスのメモリに格納

14 算術演算 論理演算命令 命令 GRx, 対象 GRxと対象を演算し 結果をGRxに格納 ADDA GRx, 対象 ; 算術加算 ADDL GRx, 対象 ; 論理加算 SUBA GRx, 対象 ; 算術減算 SUBL GRx, 対象 ; 論理減算 AND GRx, 対象 ; 論理積 OR GRx, 対象 ; 論理和 XOR GRx, 対象 ; 排他的論理和

15 算術加算と論理加算 算術加算/減算は数値を符号付整数とみなす 論理加算/減算は数値を符号なし整数とみなす 16bit符号なし整数 0~ bit符号付整数 ~32767 違いは何 符号なし =32768 問題なし 符号付 = オーバーフロー 符号なし 0-1 = アンダーフロー 符号付 0-1 = -1 問題なし

16 符号付整数と2の補数表現 nビットで数を表現する 8bit符号なし bit符号付き 2の補数による負数の表現 正の数 00(16) 7F(16) 負の数 FF(16) 80(16) : : の補数表現の利点 通常の加減算がそのまま使える 最上位ビットを見ると数の正負がわかる

17 2の補数表現 ある数の 2の補数 の求め方 すなわち符号の反 転 まず 1の補数 を求める 2進表現された数の各桁の 1 と 0 を反転する 次にその数に1を加える 例 -9 を8bit の2の補数表現で表す 9(10) = (2) NOT( ) = = 答

18 演習 次のを8ビット2進数で計算してみよう (-5) -6-2 [=(-6)+(-2)]

19 演算とフラグ 演算結果によってフラグレジスタ (FR)の内容が セットされる FR 3ビット には OF, SF, ZF 各1ビット のフラグが含 まれる OF (Overflow Flag) 演算結果がオーバーフローまた はアンダーフローした時1になる SF (Sign Flag): 演算結果が負のとき1になる ZF (Zero Flag): 演算結果が0のとき1になる 条件付き分岐命令で参照される

20 比較演算命令 減算をして結果のフラグだけをセットする 減算結 果は保存されない CPA GRx, 対象 ; 算術比較 CPL GRx, 対象 ; 論理比較 例 CPA GR0, GR1 ; GR0-GR1 を計算 GR0=GR1なら ZFに1がセットされる GR0<GR1なら SFに1がセットされる

21 シフト演算命令 レジスタの各ビットを右か左にずらす SLA GRx, シフト量 ; 算術左シフト 数値的に2倍 SRA GRx, シフト量 ; 算術右シフト 数値的に1/2倍 SLL GRx, シフト量 ; 論理左シフト 単純なシフト SRL GRx, シフト量 ; 論理右シフト 単純なシフト 算術シフト 論理シフト 0 0 0

22 シフト演算命令 演算例 8bit 本当は16bit 元の数値 SLA SRA 算術シフト SLL SRL 論理シフト 0 0 0

23 分岐命令 条件を満たす場合に 指定アドレスから実行 JUMP アドレス ; 指定アドレスから実行する JPL アドレス ; 演算結果が正の場合 JMI アドレス ; 演算結果が負の場合 JNZ アドレス ; 演算結果が0でない場合 JZE アドレス ; 演算結果が0の場合 JOV アドレス ; オーバーフローが起きた場合 条件 はフラグレジスタの状態に対応 正 SF=0 かつ ZF=0 負 SF=1 零 ZF=0 非零 ZF=1

24 分岐命令 どうやって実行順序を変えるのか 実行アドレスは PR レジスタに格納されている PR レジスタに値を格納すれば 次はそのアドレスから 実行が始まる 分岐命令はレジスタ間のデータ転送命令の一種

25 分岐命令の使用例 0000: LAD GR0,0 ;GR0=0 0002: LAD GR1,1 ;GR1=1 0004: LAD GR2,1 ;GR2=1 0006: B LAD GR3,11 ;GR3= : 2401 ADDA GR0,GR1 ;GR0+=GR1 0009: 2412 ADDA GR1,GR2 ;GR1+=GR2 000A: 4413 CPA GR1,GR3 ;GR1-GR3 000B: JNZ #0008 ;if not zero 0008

26 スタック操作命令 スタック 各種データを一時保存しておくメモリ データをスタックに入れる操作(PUSH)と取り出す操作 (POP)が対になる 最後に入れたデータが最初に取り出される PUSH, POP命令 PUSH 値 [, GRy] SPレジスタの値を-1し SPの示すアドレスのメモリに指定し た値(+GRy)を格納する POP GRy SPレジスタの値が示すアドレスのメモリの内容をGRyに格納 し SPの値を+1する

27 PUSHとPOP PUSH 0,GR1 PUSH 0,GR2 GR0 GR GR FFFF FFFE SP POP GR2 途中の処 理でGR1 とGR2の 値が破壊 される POP GR FFFD FFFD FFFE FFFF FFF8 FFF9 FFFA FFFB FFFC FFFD FFFE FFFF 5

28 サブルーチン命令 関数やサブルーチンを実現する 任意のアドレスから特定のアドレスにジャンプ し サブルーチン実行後に元のアドレスに戻ってく る CALL アドレス[,GRy] 現在実行中のアドレスの次のアドレスをスタックにPUSH 指定したアドレスにジャンプ RET スタックからアドレスをPOPして そのアドレスにジャンプ

29 サブルーチン命令 関数やサブルーチンを実現する 任意のアドレスから特定のアドレスにジャンプ し サブルーチン実行後に元のアドレスに戻ってく る CALL アドレス[,GRy] 現在実行中のアドレスの次のアドレスをスタックにPUSH 指定したアドレスにジャンプ RET スタックからアドレスをPOPして そのアドレスにジャンプ

30 サブルーチン 同じ処理をいろいろなところから利用する : CALL #2000 : : CALL #2000 : 2000 処理内容 : RET : CALL #2000 : : CALL #2000 : 2000 処理内容 : RET

31 サブルーチンの実現 : 1200 CALL # : : CALL #2000 : 処理内容 : RET PR SP FFFD FFFE FFFF 1200 FFFF : 1200 CALL # : : CALL #2000 : 処理内容 : RET PR 2000 SP FFFE FFFD FFFE FFFF 1202

32 サブルーチンの実現 : 1200 CALL # : : CALL #2000 : 処理内容 : RET PR SP 2024 FFFE FFFD FFFE FFFF 1202 : 1200 CALL # : : CALL #2000 : 処理内容 : RET PR 1202 SP FFFF FFFD FFFE FFFF 1202

33 その他 SVC アドレス[,GRy] アドレスを引数としてシステムコール 何が起きるかはOS依存 OSの機能を呼び出すために使う NOP 何もしない

34 命令コード それぞれの命令に数値が対応する 命令は1ワード(16bit)または2ワード(32bit) 命令語の構成 1ワード目 OP1 (4) OP2 (4) R1 (4) 0: NOP 1: データ転送命令 2: 加減算命令 3: 論理演算命令 4: 比較命令 5: シフト命令 6: 分岐命令 R2 (4) 7: スタック操作命令 8: サブルーチン命令 F: SVC

35 命令コード 算術演算の場合の例 OP1 2 OP2 R1,R2 命令長 命令 0 0~7 2 ADDA R1, addr, R2 1 0~7 2 SUBA R1, addr, R2 2 0~7 2 ADDL R1, addr, R2 3 0~7 2 SUBL R1, addr, R2 4 0~7 1 ADDA R1, R2 5 0~7 1 SUBA R1, R2 6 0~7 1 ADDL R1, R2 7 0~7 1 SUBL R1, R2 ADDL GR0, #FF00, GR3 SUBA GR2, GR4 ADDA GR2, # FF

36 プログラム例 GR1とGR2に入っている整数の乗算サブルーチン 0000: 0002: 0004: 0005: 0006: 0008: GR2 0を仮定 結果はGR0に格納 GR3の内容は破壊される LAD GR0,0 LAD GR3,1 ADDA GR0,GR1 SUBL GR2,GR3 JNZ #0004 RET ;GR0 0 ;GR3 1 ;GR0 GR0+GR1 ;GR2 GR2-GR3 ;if not zero goto 0004 ;return

37 プログラム例 GR1とGR2に入っている整数の乗算サブルーチン 0000: 0002: 0004: 0006: 0008: 0009: 000A: 000C: 000D: 000E: GR2,GR3を破壊しないバージョン LAD GR0,0 PUSH 0,GR2 PUSH 0,GR3 LAD GR3,1 ADDA GR0,GR1 SUBL GR2,GR3 JNZ #0008 POP GR3 POP GR2 RET ;GR0 0 ;GR2を退避 ;GR3を退避 ;GR3 0 ;GR0 GR0+GR1 ;GR2 GR2-GR3 ;if(not zero) goto #0008 ;GR3を復帰 ;GR2を復帰 ;return

38 演習 これは何をするプログラムか説明せよ 入力は GR1 アドレス GR2 正の整数 出力は GR3 整数 0011番地の 1 は定数 0000: 0002: 0004: 0006: 0008: 000A: 000C: 000E: 0010: 0011: LD GR3,0,GR1 ADDL GR1,#0011 SUBL GR2,#0011 JZE #0010 CPA GR3,0,GR1 JPL #0002 LD GR3,0,GR1 JUMP #0002 RET 1

39 機械語とニモニック 計算機は機械語 数字で表される命令列 で動く これではわかりにくいので 命令を表現する記号 ニモニック mnemonic でプログラムを書く 動作との対応がつけやすい 機械語とニモニックは1対1対応 機械語列にするには変換が必要 Mnemonic: 記憶術 LAD GR0,0 LAD GR3,1 ADDA GR0,GR1 SUBL GR2,GR3 JNZ #0004 RET

40 アセンブリ言語 ニモニックから機械語への変換 アセンブル 組立 表参照と簡単なルールで変換できる もっと便利に アセンブリ言語 疑似命令 ラベル ジャンプ先やデータのアドレスを自動計算 マクロ プログラム開始 終了の宣言 定数領域 データ領域の宣言 よく使う命令列を1行で表現する 機械語への変換はアセンブラが行う

41 アセンブリ言語の例 コメント ラベル ; GR1とGR2の掛け算 MULT START LAD GR0,0 LOOP ADDA GR0,GR1 SUBL GR2,ONE JNZ LOOP RET ONE DC 1 END 疑似命令

42 アセンブリ言語 疑似命令 命令と同じ形で記述されるが 命令そのものではな い START: プログラムの最初を指定する ラベル必須 END: プログラムの終わりを指定する DC: 定数を定義する メモリ上にその数字が格納されるが 命令ではない DS: データ領域を定義する メモリ上に指定した語数の領域が確保される データ処理などに使う用途

43 アセンブリ言語 ラベル プログラム内のアドレスやデータのアドレスを記号で参 照する 実際のアドレスへの変換はアセンブラが行う 命令を挿入 削除した時にも変更しなくてよい マクロ よく使う複数の命令列を1つの命令のように書ける IN アドレス,長さ OUT アドレス,長さ RPUSH RPOP 指定したメモリにデータを入力 指定したメモリの内容を出力 全レジスタをPUSH 全レジスタをPOP

44 アセンブリ言語 定数の記述 MULT LOOP 定数は演算などに頻繁に使うので あたかも定数を直 接演算できるかのように書ける START 自動 LAD GR0,0 ADDA GR0,GR1 生成 SUBL GR2,=1 JNZ LOOP RET END MULT START LAD GR0,0 LOOP ADDA GR0,GR1 SUBL GR2,CONST1 JNZ LOOP RET CONST1 DC 1 END

45 アセンブラによる処理 アセンブリ言語 のプログラム アセンブラ ライブラリ 機械語 のプログラム リンカ 実行可能 プログラム

46 演習 アセンブリ言語を使い 下記のプログラムをわかりやすく記述せよ 疑似命令: START, END ラベル 定数演算 0000: 0002: 0004: 0006: 0008: 000A: 000C: 000E: 0010: 0011: LD GR3,0,GR1 ADDL GR1,#0011 SUBL GR2,#0011 JZE #0010 CPA GR3,0,GR1 JPL #0002 LD GR3,0,GR1 JUMP #0002 RET 1

47 アセンブリ言語によるプログラミング CASL-IIを使ってさまざまなプログラムを書いてみ る 通常は高級言語(Cなど)で書く操作をアセンブラで書い たらどうなるか コンピュータの基本的な動きを理解する

48 高速な乗算 加算を繰り返す乗算は簡単だが効率が悪い a b=(a+a+...+a) aをb回加算 筆算の要領で計算する 乗算の値によらず 桁数に比例する計算で済む X X

49 高速な乗算 アルゴリズム Z A B) Z 0 For i=16 to 1 by -1 If Bの最下位ビットが1 then Z Z+A End if A A*2 B B/2 End for X

50 高速な乗算 i A B Z

51 注意点 GR2の下1ビットを取り出す AND GR2,=1 これを実行するとGR2の内容が破壊される GR2の内容を保存したい場合は別なレジスタを使う LD GR4,GR2 AND GR4,=1 GR1の値を2倍する SLA GR1,1 ; 1ビット算術左シフト GR2の値を1/2倍する SRA GR2,1 ; 1ビット算術右シフト

52 アセンブリ言語で書いてみる Z: GR0, A: GR1, B: GR2, i: GR3 とする FMULT LOOP SKIP1 START LAD GR0,0 LAD GR3,16 LD GR4,GR2 AND GR4,=1 JZE SKIP1 ADDA GR0,GR1 SLA GR1,1 SRA GR2,1 SUB GR3,=1 JNZ LOOP RET END ; ; ; ; ; ; ; ; ; ; ; GR0 0 GR3 16 G4 G2 G4 G4 and 1 if not zero then G0 G0+G1 G1 G1*2 G2 G2/2 G3 G3-1 if not zero goto LOOP return

53 再帰呼び出しによる計算 C言語でよくあるやつ int factorial(int n) { if (n == 0) return 1 return n*factorial(n-1) } さっきのFMULTを使ってみる FMULTはGR1,GR2を入力としてGR0を出力とする GR4を破壊する

54 再帰呼び出しによる計算 GR5を入力 GR0を出力とする 基本的な考え方 GR5が0ならGR0に1を代入して終了 GR5を退避 GR5を1減らして階乗を計算 GR0 GR5を復帰 GR5とGR0の積をGR0に代入して終了

55 プログラム FACT SKIP2 START CPA GR5,=0 JNZ SKIP2 LAD G0,1 RET PUSH 0,GR5 SUBA GR5,=1 CALL FACT LD GR1,GR0 POP GR5 LD GR2,GR5 CALL FMULT RET END ; ; ; ; ; ; ; ; ; ; ; ; GR5-0 if zero then GR0 1 return GR5を保存 GR5 GR5-1 GR0 GR5の階乗 GR1 GR0 GR5を復帰 GR2 GR5 GR0 GT1*GR2 return

56 メモリの内容の探索 GR1から始まるGR2個のメモリの中にGR3の内容 があるかどうかをチェック 存在する場合にはGR0にアドレスを返す 存在しない場合にはGR0に0を返す GR1=#8000,GR2=7,GR3=34 GR0=#8004 アドレス GR1=#8000,GR2=4,GR3=34 GR0= GR1=#8000,GR2=7,GR3=322 GR0=8005 値 23

57 アルゴリズム While GR2 > 0 If M[GR1] = GR3 then GR0 GR1 Return End if GR2 GR2-1; GR1 GR1+1 End while GR0 0 return

58 プログラム SEARCH LOOP SKIP1 SKIP2 BREAK START CPL GR2,=0 JNZ SKIP1 JUMP BREAK CPA GR3,0,GR1 JNZ SKIP2 LD GR0,GR1 RET ADDL GR1,=1 SUBL GR2,=1 JUMP LOOP LAD GR0,0 RET END ; ; ; ; ; ; ; ; ; ; ; ; GR2-0 if zero then goto BREAK GR3-M[GR1] if zero then GR0 GR1 return GR1 GR1+1 GR2 GR2-1 goto LOOP GR0 0 return

59 演習 メモリ領域をコピーするプログラムを書け GR0が指すアドレスからGR2の個数分のメモリをGR1 が指すアドレス移行にコピーする GR0 GR0+GR2の領域とGR1 GR1+GR2の領域 には重なりがないものとする アドレス 内容 アドレス 内容 例 GR0=#8000 GR1=#8100 GR2=5 でプログラム起動 C C F C F

60 演習 メモリ領域をコピーするプログラムを書け GR0が指すアドレスからGR2の個数分のメモリをGR1 が指すアドレス移行にコピーする GR0 GR0+GR2の領域とGR1 GR1+GR2の領域 には重なりがないものとする アドレス 内容 アドレス 内容 例 GR0=#8000 GR1=#8100 GR2=5 でプログラム起動 C C C C F F C F

61 演習の方針 必ずしもこの通りでなくてもよい 1.GR0の指すメモリの内容をGR3にコピー (LD) 2.GR3の内容をGR1の指すメモリにコピー (ST) 3.GR0に1を加える (ADDL) 4.GR1に1を加える (ADDL) 5.GR2から1を引く (SUBL) 6.0でなければ1.へ (JNZ) 7.RET

62 高級言語 アセンブリ言語の問題点 実現したい計算とCPUの機能が違う 複数の命令の組み合わせで1つの処理をする わかりにくい CPUによって命令が異なる ある計算機のプログラムをほかの計算機で使えない 高級言語 計算したい内容 を直接記述 自動的に機械語に変 換 人間にとって記述が容易 変換プログラムをCPUごとに書けば 高級言語のプロ グラムの移植ができる

63 初期の高級言語 FORTRAN (1955) 数値計算言語 計算を数で記述できる(FORmula TRANslator) 装置と直接対応する入出力 プリンタ カードリーダ キーボード 磁気テープなど GOTO文による実行制御 LISP (1958) 記号とその並び リスト を処理する(LISt Processor) 関数型言語 括弧 を使った記述 今なお使われる柔軟性

64 初期の高級言語 COBOL (1959) ビジネス処理用言語 (COmmon Business Oriented Language) 表の入出力と集計 現在の表計算処理に近い 読みやすさ重視 プログラムの説明文が言語仕様に含まれる 自然言語に近い命令文 COMPUTE X = Y+1.

65 いろいろなプログラム言語 ユークリッドの互除法を実装してみる GCD(m,n): If (n=0) then m Else GCD(n,m mod n) GCD(m,n): while (n 0) t n n m mod n m t End while Return m

66 Fortran (1954) 下のコードはFortran 66 (1966) M=100 N=72 IF (N) 20,30,20 CONTINUE I=N N=M-INT(REAL(M)/REAL(N))*N M=I GOTO 10 WRITE(6,40) M FORMAT(1H,I5) STOP END

67 Fortran (1954) 下のコードはFortran 95 (1995) integer function euclid_gcd(m,n) program GCD integer::m,n integer::euclid_gcd integer::t integer::m,n do while (n /= 0) m = 100 t = n n = 72 n = mod(m,n) Print *, euclid_gcd(m,n) m = t end program end do gcd = m return end function

68 LISP (1958) コードはCommon Lisp (1984) (defun euclid-gcd (m n) (if (= n 0) m (euclid-gcd n (mod m n)) ) ) (print (euclid-gcd ))

69 COBOL (1959) IDENTIFICATION DIVISION. PROGRAM-ID. EUCLID-GCD. AUTHOR. AKINORI ITO. DATE-WRITTEN. 2018/6/10. DATE-COMPILED. 2018/6/10. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. 01 M PICTURE N PICTURE T PICTURE X PICTURE PROCEDURE DIVISION. MOVE 100 TO M. MOVE 72 TO N. PERFORM UNTIL N = 0 MOVE N to T DIVIDE M BY N GIVING X REMAINDER N MOVE T to M END-PERFORM. DISPLAY M. STOP RUN.

70 BASIC 1964 下のコードは Chipmunk Basic (1990) 10 m=100:n=72 20 if n<>0 then goto print m:end 40 t=n: n=m mod n: m=t 50 goto 20

71 Pascal (1970) Program GCD(output); function euclid_gcd(m:integer; n:integer):integer; var t:integer; begin if n=0 then euclid_gcd := m else begin t := euclid_gcd(n, m mod n); euclid_gcd := t end end; begin writeln(euclid_gcd(100,72)); end.

72 C (1972) 下のコードは ANSI-C (1990) #include <stdio.h> int euclid_gcd(int m, int n) { if (n == 0) return m; return euclid_gcd(n, m%n); } int main() { printf("%d\n",euclid_gcd(100,72)); return 0; }

73 C++ (1983) #include <iostream> using namespace std; int euclid_gcd(int m, int n) { if (n == 0) return m; return euclid_gcd(n, m%n); } int main() { cout << euclid_gcd(100,72) << endl; return 0; }

74 Perl (1987) sub euclid_gcd { my ($m, $n) if ($n == 0) { return $m; } return euclid_gcd($n, $m%$n); } print euclid_gcd(100,72);

75 Tcl (1988) proc euclid_gcd {m n} { if {$n == 0} { return $m } else { return [euclid_gcd $n [expr $m%$n]] } } puts [euclid_gcd ]

76 Haskell (1990) euclid_gcd m 0 = m euclid_gcd m n = euclid_gcd n (m `mod` n) main = print (euclid_gcd )

77 Python (1991) def euclid_gcd(m,n): if n==0: return m return euclid_gcd(n,m%n) print(euclid_gcd(100,72))

78 Ruby (1993) def euclid_gcd(m,n) if n==0 then return m else return euclid_gcd(n,m%n) end end print euclid_gcd(100,72),"\n"

79 Lua (1993) function euclid_gcd(m,n) if n==0 then return m else return euclid_gcd(n,m%n) end end print(euclid_gcd(100,72))

80 Java (1995) public class Main { public static int euclid_gcd(int m, int n) { if (n == 0) return m; return euclid_gcd(n,m%n); } public static void main(string []args){ System.out.println(euclid_gcd(100,72)); } }

81 JavaScript (1995) function euclid_gcd(m,n) { if (n == 0) { return m; } return euclid_gcd(n,m%n); } console.log(euclid_gcd(100,72));

82 R (1996) euclid.gcd <- function(m,n) { if (n==0) { return(m) } return(euclid.gcd(n,m%%n)) } cat(euclid.gcd(100,72))

83 C# (2000) using System.IO; using System; class Program { static int Euclid_GCD(int m, int n) { if (n==0) return m; return Euclid_GCD(n,m%n); } static void Main() { Console.WriteLine(Euclid_GCD(100,72)); } }

84 Go (2009) package main import "fmt" func euclid_gcd(m int, n int) int { if (n==0) { return m } return euclid_gcd(n,m%n) } func main() { fmt.printf("%d\n",euclid_gcd(100,72)) }

85 Julia (2012) function euclid_gcd(m,n) if n==0 m else euclid_gcd(n,m%n) end end println(euclid_gcd(100,72))

86 高級言語の実現方 コンパイラ 高級言語のプログラムを読み込み それを機械語に変 換して 単独で動く機械語の実行形ファイルを生成す る 実行は高速 できたプログラムはCPU依存 デバッグが面倒 動いているプログラムとソースプログ ラムの対応がつけにくい ライブラリ ソース プログラム コンパイラ オブジェクト プログラム 機械語 リンカ 実行可能 プログラム

87 高級言語の実現方法 インタプリタ 高級言語のプログラムを読み込み その内容を直接実 行する 高級言語に対応する機械語のプログラムは生成され ない 実行は遅く プログラムのCPU依存性は少ない 実行状況が把握しやすい ソース プログラム インタプリタ 直接 実行

88 高級言語の実現方法 中間言語 バイトコード コンパイラ 仮想的なCPUの機械語にコンパイル CPUエミュレー タ 仮想マシン VM による実行 実行する計算機のCPUに依存せず インタプリタより速 い コンパイラより遅い 直接 実行 ソース プログラム コンパイラ オブジェクト プログラム 機械語 バイトコード エミュレータ 仮想マシン

89 代表的な高級言語と実現方法 コンパイラ Fortran LISP* C C++ Objective-C インタプリタ LISP* BASIC Perl Ruby Python* JavaScript PHP 中間言語 Smalltalk Java Python* C#

90 コンパイラのお仕事 ソースプログラムから最終的な機械語 コード を生 成するには段階がある ソース プログラム 構文解析 変換ルール 中間表現 最適化 コード コード コード生成 ルール 最適化 ルール

91 構文解析 単なる文字列であるソースプログラムから構造を 見つけ出す プログラム 文 a=b+1; 変数 a 構文木 = ; + 変数 定数 b 1

92 構文解析ルールの例 プログラム 文 プログラム プログラム 文 文 変数 = ; 変数 定数 + ()

93 構文解析ルールと構文木 プログラム 文 プログラム プログラム 文 文 変数 = ; 変数 定数 + () プログラム 文 変数 a = ; + 変数 定数 b 1 構文木が1段下がる部分は構文解析ルール1つと対応する

94 構文解析ルールと構文木 プログラム 文 プログラム プログラム 文 文 変数 = ; 変数 定数 + () プログラム 文 変数 a = ; + 変数 定数 b 1 構文木が1段下がる部分は構文解析ルール1つと対応する

95 構文解析ルールと構文木 プログラム 文 プログラム プログラム 文 文 変数 = ; 変数 定数 + () プログラム 文 変数 a = ; + 変数 定数 b 1 構文木が1段下がる部分は構文解析ルール1つと対応する

96 構文解析ルールと構文木 プログラム 文 プログラム プログラム 文 文 変数 = ; 変数 定数 + () プログラム 文 変数 a = ; + 変数 定数 b 1 構文木が1段下がる部分は構文解析ルール1つと対応する

97 構文解析ルールと構文木 プログラム 文 プログラム プログラム 文 文 変数 = ; 変数 定数 + () プログラム 文 変数 a = ; + 変数 定数 b 1 構文木が1段下がる部分は構文解析ルール1つと対応する

98 構文解析ルールと構文木 プログラム 文 プログラム プログラム 文 文 変数 = ; 変数 定数 + () プログラム 文 変数 a = ; + 変数 定数 b 1 構文木が1段下がる部分は構文解析ルール1つと対応する

99 構文解析ルールと構文木 プログラム 文 プログラム プログラム 文 文 変数 = ; 変数 定数 + () プログラム 文 変数 a = ; + 変数 定数 b 1 構文木が1段下がる部分は構文解析ルール1つと対応する

100 構文解析ルールと構文木 プログラム 文 プログラム プログラム 文 文 変数 = ; 変数 定数 + () プログラム 文 変数 a = ; + 変数 定数 b 1 構文木が1段下がる部分は構文解析ルール1つと対応する

101 構文解析ルールと構文木 プログラム 文 プログラム プログラム 文 文 変数 = ; 変数 定数 + () プログラム 文 変数 a = ; + 変数 定数 b 1 構文木が1段下がる部分は構文解析ルール1つと対応する

102 演習 次のプログラムの構文木を示せ x=(y+1)-z;

103 構文木から中間表現へ さまざまな中間表現がある ここでは 四つ組 を紹介 四つ組 演算 対象1 対象2 格納先 元の文 四つ組 y=x+1 z=x+y+2 (+, x, 1, y) (+, x, y, T1) (+, T1, 2, z) x=a+b*c (*, b, c, T1) (+, a, T1, x) x=1 (=, 1,,x) T1は中間変数 自動的に確保される 必要に応じてT2, T3 なども 使う

104 構文木から中間表現へ 機械的な四つ組生成 変数=; の場合 文 の四つ組を生成 値が格納された中間変数をTと するとき (=, T,,変数) を生成 変数 a = ; の場合 1の四つ組を生成し 中間変 数T1に格納 2の四つ組を生成し 中間変 数T2に格納 自動生成された中間変数をTと するとき (+, T1, T2, T) を生成 変数 定数 b 1

105 構文木から中間表現へ 機械的な四つ組生成 変数 の場合 文 中間変数をTとすると (=, 変数,,T) を生成 定数 の場合 中間変数をTとすると (=, 定数,,T) を生成 変数 a = ; + 変数 定数 b 1

106 構文木から中間表現へ 生成例 文 変数 a = ; + 変数 定数 b 1

107 構文木から中間表現へ 生成例 の部分の四つ組を生成 してT1に格納 文 変数 = ; T1を変数に格納 a + 変数 定数 b 1

108 構文木から中間表現へ 生成例 の部分の四つ組を生成 してT1に格納 文 変数 = ; (=, T1,,a) a + 変数 定数 b 1

109 構文木から中間表現へ 生成例 左のの四つ組を生成してT2 に格納 変数 右のの四つ組を生成してT3 に格納 a (+, T2, T3, T1) (=, T1,,a) 文 = ; + 変数 定数 b 1

110 構文木から中間表現へ 生成例 変数の内容をT2に格納 右のの四つ組を生成してT3 変数 に格納 a (+, T2, T3, T1) (=, T1,,a) 文 = ; + 変数 定数 b 1

111 構文木から中間表現へ 生成例 (=, b,,t2) 右のの四つ組を生成してT3 変数 に格納 a (+, T2, T3, T1) (=, T1,,a) 文 = ; + 変数 定数 b 1

112 構文木から中間表現へ 生成例 (=, b,,t2) 定数をT3に格納 (+, T2, T3, T1) (=, T1,,a) 文 変数 a = ; + 変数 定数 b 1

113 構文木から中間表現へ 生成例 (=, b,,t2) (=, 1,,T3) (+, T2, T3, T1) (=, T1,,a) 文 変数 a = ; + 変数 定数 b 1

114 構文木から4つ組の生成 準備 構文木の節点 ノード Node n; 節点の子節点 n.child(k) 節点の種類 n.type == 文 文 変数 a = ; + 変数 定数 b 1

115 構文木から4つ組の生成 準備 構文木の節点 ノード Node n; 節点の子節点 n.child(k) 節点の種類 n.type == 文 文 変数 a = ; + 変数 定数 b 1

116 構文解析ルールの例 プログラム 文 プログラム プログラム 文 文 変数 = ; 変数 定数 +

117 4つ組生成手続き 文 Generate(Node n) { If (n.type == and n.child.type == ( 変数 = ; )) { tmpvar = 一時変数名 GenerateExpression(n.child(2), tmpvar) Output( =, tmpvar, null, n.child(0)) } }

118 4つ組生成手続き GenerateExpression(Node n, String tmpvar) { If (n.child(0).typeが 変数 または 定数 ) { Output( =,n.child(0).child(0), null,tmpvar) } Else if (n.child(1).type が + または - ) { t1 = 一時変数名; t2 = 一時変数名 GenerateExpression(n.child(0), t1) GenerateExpression(n.child(2), t2) Output(n.child(1).type, t1, t2, tmpvar) }

119 4つ組の生成例 Generate(n1) n1 文 n2 n3 変数 n6 a n4 = n5 ; n8 n7 + n9 n10 変数 n11 定数 n13 n12 b 1

120 4つ組の生成例 Generate(n1) GenerateExpression(n.child(2), tmpvar) Output( =, tmpvar, null, n.child(0)) n1 文 n2 n3 変数 n6 a n4 = n5 ; n8 n7 + n9 n10 変数 n11 定数 n13 n12 b 1

121 4つ組の生成例 Generate(n1) GenerateExpression(n4, "T1") Output( =, tmpvar, null, n.child(0)) n1 文 n2 n3 変数 n6 a n4 = n5 ; n8 n7 + n9 n10 変数 n11 定数 n13 n12 b 1

122 4つ組の生成例 Generate(n1) GenerateExpression(n4, "T1") GenerateExpression(n7, "T2") n1 文 GenerateExpression(n.child(2), "T3") Output(n8.type, "T2", "T3", "T1") Output( =, "T1", null, n.child(0)) n2 n3 変数 n6 a n4 = n5 ; n8 n7 + n9 n10 変数 n11 定数 n13 n12 b 1

123 4つ組の生成例 Generate(n1) GenerateExpression(n4, "T1") GenerateExpression(n7, "T2") n1 文 GenerateExpression(n.child(2), "T3") Output(n8.type, "T2", "T3", "T1") Output( =, "T1", null, n.child(0)) n2 n3 変数 n6 a n4 = n5 ; n8 n7 + n9 n10 変数 n11 定数 n13 n12 b 1

124 4つ組の生成例 Generate(n1) GenerateExpression(n4, "T1") GenerateExpression(n7, "T2") n1 文 Output( =,n.child(0).child(0), null,"t2") GenerateExpression(n.child(2), "T3") Output(n.child(1).type, "T2", "T3", "T1") n2 n3 変数 Output( =, "T1", null, n.child(0)) n6 a n4 = n5 ; n8 n7 + n9 n10 変数 n11 定数 n13 n12 b 1

125 4つ組の生成例 Generate(n1) GenerateExpression(n4, "T1") GenerateExpression(n7, "T2") n1 文 Output( =,n12, null,"t2") GenerateExpression(n.child(2), "T3") Output(n.child(1).type, "T2", "T3", "T1") n2 n3 変数 Output( =, "T1", null, n.child(0)) n6 a n4 = n5 ; n8 n7 + n9 n10 変数 n11 定数 n13 n12 b 1

126 4つ組の生成例 Generate(n1) GenerateExpression(n4, "T1") GenerateExpression(n7, "T2") n1 文 Output( =,n12, null,"t2") GenerateExpression(n.child(2), "T3") Output(n.child(1).type, "T2", "T3", "T1") n2 n3 変数 Output( =, "T1", null, n.child(0)) n6 a n4 = n5 ; n8 n7 + n9 n10 (=, b,, T2) 変数 n11 定数 n13 n12 b 1

127 4つ組の生成例 Generate(n1) GenerateExpression(n4, "T1") GenerateExpression(n7, "T2") n1 文 Output( =,n12, null,"t2") GenerateExpression(n9, "T3") Output(n.child(1).type, "T2", "T3", "T1") n2 n3 変数 Output( =, "T1", null, n.child(0)) n6 a n4 = n5 ; n8 n7 + n9 n10 (=, b,, T2) 変数 n11 定数 n13 n12 b 1

128 4つ組の生成例 Generate(n1) GenerateExpression(n4, "T1") GenerateExpression(n7, "T2") n1 文 Output( =,n12, null,"t2") GenerateExpression(n9, "T3") Output( =,n13, null,"t3") n2 n3 変数 Output(n.child(1).type, "T2", "T3", "T1") Output( =, "T1", null, n.child(0)) n6 a n4 = n5 ; n8 n7 + n9 n10 (=, b,, T2) 変数 n11 定数 n13 n12 b 1

129 4つ組の生成例 Generate(n1) GenerateExpression(n4, "T1") GenerateExpression(n7, "T2") n1 文 Output( =,n12, null,"t2") GenerateExpression(n9, "T3") Output( =,n13, null,"t3") n2 n3 変数 Output(n.child(1).type, "T2", "T3", "T1") Output( =, "T1", null, n.child(0)) n6 a n4 = n5 ; n8 n7 + n9 n10 (=, b,, T2) 変数 n11 定数 n13 n12 b 1

130 4つ組の生成例 Generate(n1) GenerateExpression(n4, "T1") GenerateExpression(n7, "T2") n1 文 Output( =,n12, null,"t2") GenerateExpression(n9, "T3") Output( =,n13, null,"t3") n2 n3 変数 Output(n.child(1).type, "T2", "T3", "T1") Output( =, "T1", null, n.child(0)) n6 a n4 = n5 ; n8 n7 + n9 n10 (=, b,, T2) (=, 1,, T3) 変数 n11 定数 n13 n12 b 1

131 4つ組の生成例 Generate(n1) GenerateExpression(n4, "T1") GenerateExpression(n7, "T2") n1 文 Output( =,n12, null,"t2") GenerateExpression(n9, "T3") Output( =,n13, null,"t3") n2 n3 変数 Output(n.child(1).type, "T2", "T3", "T1") Output( =, "T1", null, n.child(0)) n6 a n4 = n5 ; n8 n7 + n9 n10 (=, b,, T2) (=, 1,, T3) 変数 n11 定数 n13 n12 b 1

132 4つ組の生成例 Generate(n1) GenerateExpression(n4, "T1") GenerateExpression(n7, "T2") n1 文 Output( =,n12, null,"t2") GenerateExpression(n9, "T3") Output( =,n13, null,"t3") n2 n3 変数 Output("+", "T2", "T3", "T1") Output( =, "T1", null, n.child(0)) n6 a n4 = n5 ; n8 n7 + n9 n10 (=, b,, T2) (=, 1,, T3) (+, T2, T3, T1) 変数 n11 定数 n13 n12 b 1

133 4つ組の生成例 Generate(n1) GenerateExpression(n4, "T1") GenerateExpression(n7, "T2") n1 文 Output( =,n12, null,"t2") GenerateExpression(n9, "T3") Output( =,n13, null,"t3") n2 n3 変数 Output("+", "T2", "T3", "T1") Output( =, "T1", null, n.child(0)) n6 a n4 = n5 ; n8 n7 + n9 n10 (=, b,, T2) (=, 1,, T3) (+, T2, T3, T1) 変数 n11 定数 n13 n12 b 1

134 4つ組の生成例 Generate(n1) GenerateExpression(n4, "T1") GenerateExpression(n7, "T2") n1 文 Output( =,n12, null,"t2") GenerateExpression(n9, "T3") Output( =,n13, null,"t3") n2 n3 変数 Output("+", "T2", "T3", "T1") Output( =, "T1", null, a) n6 a n4 = n5 ; n8 n7 + n9 n10 (=, b,, T2) (=, 1,, T3) (+, T2, T3, T1) (=, T1,,a) 変数 n11 定数 n13 n12 b 1

135 効率の良い中間表現生成 前ページの中間表現は実は1行で書ける (+, b, 1, a) 最初からこういう中間表現を生成するには 中間表現の生成ルールを細かくする 中間表現を生成した後 コードの無駄を省く処理を行う 最適化

136 細かいコード生成ルール 1 2 の場合 最後に格納する一時変数をT1とする 1の先 変数 2の 変数 先 定数 その他 (+,変数1,変数2, T1 定数 (+,定数1,変数2, T1 その他 1の四つ組を生成し てT2に格納 (+,T2,変数2,T1) (+,変数1,定数2, (+,定数1,定数2, 1の四つ組を生成し T1 T1 てT2に格納 (+,T2,定数2,T1) 1の四つ組を生成 1の四つ組を生成 1の四つ組を生成し してT2に格納 してT2に格納 てT2に格納 (+,T2,変数2,T1) (+,T2,定数2,T1) 2の四つ組を生成し てT3に格納 (+,T2,T3,T1)

137 最適化の例 中間表現があるパターンに合致する場合には置き換 えを行う 例 ある一時変数に何かを代入し そのあとその一時変数 が1回しか使われていなければ 後者の一時変数を前者 の変数または定数に置き換える (=, x,,t3) : (+, T3, T4, T2) (=, x,,t3) : (+, x, T4, T2) ある一時変数に結果を代入し それをすぐに別な変数に 代入しているとき 一時変数をその変数に置き換える (+, x, y, T1) (=, T1,, z) (+, x, y, z) (=, T1,,z)

138 最適化の例 (=, b,,t2) (=, 1,,T3) (+, T2, T3, T1) (=, T1,,a) (=, 1,,T3) (+, b, 1, T1) (=, T1,,a) (=, b,,t2) (=, 1,,T3) (+, b, T3, T1) (=, T1,,a) (+, b, 1, T1) (=, T1,,a) (=, 1,,T3) (+, b, T3, T1) (=, T1,,a) (+, b, 1, a) (=, T1,,a)

139 コード生成 四つ組の列を命令列に変換 変換ルール例 四つ組 (=, X,, Y) (+, X, Y, Z) (-, X, Y, Z) ニモニック LD G0,X ST G0,Y LD G0,X ADDA G0,Y ST G0,Z LD G0,X SUBA G0,Y ST G0,Z

140 コード生成例 高級言語 中間言語 生成コード X=Y+1; (+,Y, 1, X) Z=X+Y-2; (+, X, Y, T1) (-, T1, 2, Z) LD G0,Y ADDA G0,=1 ST G0,X LD G0, X ADDA G0, Y ST G0, T1 LD G0, T1 SUBA G0, =2 ST G0, Z

141 演習 Z=X+Y-2 からコード生成が行われるまでの処理を 記述せよ 構文木 四つ組の生成 最適化 コード生成

142 データ表現とデータ構造 コンピュータは数字しか扱えない メモリの1つの番地には一定範囲の整数しか格納でき ない 8ビットなら0 255 または それ以外のデータはどうやって表現されているの か 実数 文字と文字列 マルチメディアデータ 画像 音声

143 整数 符号なしnビット整数 0 2n-1 符号付きnビット整数 -2n-1 2n-1-1 ビット長 8 (char) 16 (short) 32 (long) 64 (long long) 符号なし 符号付き

144 実数 固定小数 有理数 浮動小数 固定小数 小数点の上と下の精度が固定 有理数 整数の比 浮動小数 小数点の位置が変動 数処理などでは使われるが あまり一般的でない のような形 多くの場合浮動小数形が使われる

145 固定小数表現 小数点の上と下の精度が固定 32ビット固定小数 FFF.FFFF16 10進では 最小精度 = 利点 計算が簡単 基本的に通常の整数演算と同じ 欠点 表せる数値の範囲が限られる 限られた範囲の数だけを高速に表現する用途に使 われる 信号処理チップなど

146 浮動小数表現 数値の有効桁数を一定にする表現方法 のような形 符号s 仮数a 基数b指数pの形で表される 通常1 a<2, b=2, s=1 or -1 s p ビット長 32 (float) 64 (double) 128 a s a 有効桁 数 p 1 1 1

147 IEEE形浮動小数 16, 32, 64, 128bit s=0 正の数 またはs=1 負の数 指数部はバイアス表現 -2n-1+2 2n-1-1を表現 整数の2n-1-1を0とする 表したい数値に2n-1-1を加える 8ビットの場合 0116が-126, 7F16が0,FE16が127 数でないもの の表現 オーバーフローを表す +Inf, -Inf (p=ff16, a=0) Not a Number (NaN) (p=ff16, a 0) ゼロ除算 負の数の平方根など

148 IEEE形浮動小数 例 -3.5をIEEE形32ビット浮動小数にする 負の数なのでs=1 3.5= より 3.5= = = = より a=1.112, p=1 pをバイアス表現にし(127を加え て2進数にすると p= sが1ビット pが8ビット aが23ビット aの先頭の1.を除く

149 演習 4.125をIEEE形32ビット浮動小数で表せ a) 符号sを決める b) 4.125を小数点付き2進数に変換する c) それを1以上2未満の数a 2pの形にする d) pを8ビットのバイアス表現に変換 e) s 1ビット p 8ビット a 23ビット を並べる a) b) aの先頭の1.は省く 23ビットに満たない部分は右に0を詰める

150 浮動小数演算 浮動小数の形に合わせるため 複雑な計算が 必要 x1=(s1,a1,p1)とx2=(s2,a2,p2)の加算 簡単のためs1=s2 p1>p2と仮定する a2 a2/2p1-p2 a a1+a2, p p1, s s1 while a>2 a a/2, p p+1 return (s,a,p)

151 浮動小数演算 x1=(s1,a1,p1)とx2=(s2,a2,p2)の乗算 s s1 s2 p p1+p2 a a1 a2 while a>2 a a/2, p p+1 return (s,a,p)

152 文字の表現 整数と文字を対応させる 符号化 文字セット 文字集合 表現すべき文字の集合 言語に依存する 多くの言語が同時に表現できる文字セットもある 文字コード 文字符号 文字セット内の文字と数字 の対応 またはその数字 1つの文字セットに対して文字コードが複数ある場合も ある

153 文字セット 表現すべき文字の集合 英語 日本語 JIS X0201: アルファベット 記号 数字 カタカナ い わゆる半角カナ JIS X0208: 漢字 記号 いわゆる全角記号 JIS X0213: 補助漢字 US-ASCII: アルファベット 数字 記号 多言語 ISO/IEC (JIS X0221): いわゆるUnicode

154 US-ASCII 英語のための代表的な文字セット 文字コード American Standard Code for Information Interchange の略 アルファベット 数字 記号を7ビットで表現する

155 US-ASCII 20 sp P 60 ` 70 p 21! A 51 Q 61 a 71 q B 52 R 62 b 72 r 23 # C 53 S 63 c 73 s 24 $ D 54 T 64 d 74 t 25 % E 55 U 65 e 75 u 26 & F 56 V 66 f 76 v 27 ' G 57 W 67 g 77 w 28 ( H 58 X 68 h 78 x 29 ) I 59 Y 69 i 79 y 2A * 3A : 4A J 5A Z 6A j 7A z 2B + 3B ; 4B K 5B [ 6B k 7B { 2C, 3C < 4C L 5C \ 6C l 7C 2D - 3D = 4D M 5D ] 6D m 7D } 2E. 3E > 4E N 5E ^ 6E n 7E ~ 2F / 3F? 4F O 5F _ 6F o 7F DEL

156 文字コード 文字符号化方 文字セット中の文字には番号が振られているが それをどうやってコンピュータ上で表現するかは別 途規定される 文字符号化方 日本語の場合 文字セット JIS X0201+X0208+X0213 文字コード ISO-2022-JP Shift-JIS EUC-JP

157 日本語の文字コード ISO-2022-JP 7ビットの符号の組み合わせで文字を表現する ASCII, X0201, X0208, X0213を切り替えるときには文 字セット切り替え用シーケンスを使う あaア 1b b b 28 4a b1 1b Shift-JIS 8ビットの符号の組み合わせで文字を表現する X0201は1バイト/文字 X0208は2バイト/文字 X0201 アルファベット 半角カナ とX0208の共存 あaア 82 a0 61 b1

158 日本語の文字コード EUC-JP UNIX用拡張文字コード(Extended Unix Code)の日本 語版 中国語 韓国語版もある 8ビットの符号の組み合わせで文字を表現する ASCII, X0201カナ, X0208, X0213が表現可能 ASCIIは1バイト X0201カナとX0208は2バイト X0213は3 バイト/文字 あaア a4 a2 61 8e b1

159 文字コード 文字符号化方 多言語用の文字セットと文字コード 文字セット Unicode, ISO/IEC 微妙に違う企画だが実質同じ Unicodeは業界規格 ISO/IEC 10646は国際規格 世界の多くの言語で使用される文字をカバーする 文字に対応する番号 U+nnnnn a=u+0061 ä=u+00e4 ऑ U+0911 ఊ U+0C0A あ U+3042

160 多言語の文字コード UTF-8 8ビットの符号の組み合わせで文字を表現する 1文字あたり1 4バイト 漢字は常に3バイト US-ASCIIと互換性がある あaア e ef bd b1 UTF-16 16ビットの符号の組み合わせで文字を表現する 1文字あたり2 4バイト 多くの文字は2バイト 上位バイトが先に来る(Big Endian)場合と下位バイトが 先に来る(Little Endian)場合がある あaア ff 71 (UTF-16BE)

161 画像の符号化 画像を数字に 画像を細かい点(pixel)の集まりで表現する

162 ピクセル

163 色の表現 加法混色による色の表現 赤(R)緑(G)青(B)の重ね合わせで 色を表現する それぞれの色の明るさの段階 1ビット 2段階(ON/OFF) 8色 8ビット=256段階 色 RGBそれぞれを8ビット =16進数2桁で表現 (R,G,B)=(6B,23,94) #6b2394

164 画像符号化 画像は情報量が多い サイズで1ピクセル3バイト 1画像あたり2.3Mバイト 画像の圧縮 画像のサイズをできるだけ縮める 無圧縮 可逆圧縮:圧縮前の画像に戻せる BMPなど GIF, PNGなど 圧縮率は低い 不可逆圧縮 圧縮前の画像に戻らない JPEG, JPEG2000など 圧縮率は高い

165 BMP 901kbyte JPEG 102kbyte JPEG 23kbyte JPEG 11kbyte

166 音声の符号化 音は空気の波 マイクロフォンで電圧変化に変換される 時間的に連続 取る値も連続 時間と電圧を離散化 整数列に変換 V t

167 標本化と量子化 時間的に離散化 標本化 電圧を離散化 量子化

168 標本化と量子化 時間的に離散化 標本化 電圧を離散化 量子化

169 標本化と量子化 標本化を細かくするほど 高周波数成分 まで再現 できる 量子化を細かくするほど 量子化雑音 を減らすこ とができる

170 アルゴリズム 計算モデル 計算量 コンピュータに計算させるなら 速いほうがいい どうやって計算させるのか アルゴリズム 算法 解を求めるための計算手順 それはどのくらい早いのか 計算量 実行するコンピュータの違いを吸収 計算モデル 絶対的な速さは求めにくい 漸近的計算量

171 アルゴリズム (algorithm) 問題と入力が与えられた時に 解を求める方法 同じ問題に対して複数のアルゴリズムがありうる ユークリッドの互除法 2数から最大公約数を求める 2次方程の解の公 係数から解を求める 数学の問題に複数の解法があるのと同じ アルゴリズムがない問題もある 解が永遠に求まらない可能性がある問題など

172 アルゴリズムの例 ユークリッドの互除法 1. 2つの数をm,nとし m nとする 2.n=0ならば mが答えとなり 終了 3.(m, n) (n, m mod n) mod は剰余 4.2に戻る // C言語による記述例 // m>=0, n>=0, m >= nでなければならない int Euclid(int m, int n) { int new_m; while (n > 0) { new_m = n; n = m % n; m = new_m; } return m; }

173 計算の 大変さ を測る どうやって測るのか 計算にかかる時間 ベンチマーク 直接的だが問題が多い コンピュータによって変化する CPU クロック メモリ量など 入力によって変化する 入力が多ければ一般に時間がかかる ある量の入力サイズで突然遅くなることがある コンピュータによって処理できるサイズに上限がある 以上から 絶対的な指標 としては不適当

174 漸近的計算量と計算モデル 実際のコンピュータではなく 計算モデル を想定 計算時間ではなく ステップ数 を対象とする 理想化されたコンピュータ メモリの制約がない 等 ステップ数はコンピュータの種類への依存が少ない ステップ数そのものではなく 入力の増加に伴うステップ数の増え方 を考える 漸近的計算量 計算時間が問題なのはデータが多い時なので データ が巨大になったときどれだけ遅いかを重視

175 計算モデル 理想化された計算機械 さまざまなものがあるが 最も性能が高いものは どれ も計算能力は同じであることが証明されている チューリングマシン (TM) ランダムアクセスマシン (RAM) 帰納的関数

176 チューリングマシン Alan Turingによる最初の計算モデル 状態 ヘッド A = 1 0 ; B = A + テープ 2 ; 現在の 状態 と ヘッドが 読んだ文字に応じて 次の どれかの動作をする ヘッドの位置のテープに 指定された文字を書く ヘッドを右に1つ動かす ヘッドを左に1つ動かす 動作したら次の状態に遷移 する F 無限に長い

177 ランダムアクセスマシン 通常のコンピュータの抽象化 メモリ レジスタ があり アドレスの番号で指定できる メモリには任意の自然数が格納できる メモリは必要に応じて充分大きい メモリはそのアドレスの番号によらず一定時間で読み 書きできる ランダムアクセス メモリの内容に対して基本的な演算をして またメモリ に格納することができる メモリの内容をアドレスだと解釈して それが示すメモリ の内容が読み書きできる 間接アドレッシング

178 ステップ数 計算をするときに行う基本的な演算の回数 なにが 基本的な演算か は場合によって異なる 比較演算 値のコピー 加減算 乗除算

179 漸近的計算量 ある入力に対するステップ数 ではなく 入力の 変化に対するステップ数の変化 を見る 入力サイズが2倍になった時に ステップ数同じ ステップ数が定数回増える ステップ数が2倍 ステップ数が4倍 ステップ数が8倍 ステップ数が2乗 O(1) O(log n) O(n) O(n2) O(n3 ) O(2 n ) オーダー記号

180 オーダー記号 入力のサイズに対してステップ数がどのように大き くなるかを示す記号 O, Ω, Θ などの種類がある 数学的定義 入力のサイズをn ステップ数をT(n)とする 関数 f (n)について 定数Nとαが存在して n N T (n) α f (n) アルゴリズムの 漸近的 計算量はO( f (n))

181 オーダー記号 O( f (n)) α f (n) T (n) こちらでは T (n) α f (n) N n 問題のサイズが十分に大きいときのステップ数の上限

182 その他のオーダー記号 Ω( f (n)) T (n) Θ( f (n)) α 2 f (n) T (n) α 1 f (n) α f (n) N T (n) α f (n) 問題のサイズが十分 に大きいときのステッ プ数の下限 n n N α 1 f (n) T (n) α 2 f (n) 問題のサイズが十分 に大きいときのステッ プ数の上下限

183 オーダーの例 T (n)=3 n T (n)=n + 2 n+ 100 O (n) (α=4, N =10) 3 O (n ) (α=2, N =5) T (n)の中で最も早く発散する項を f (n)とすると O( f (n))

184 多項時間と指数時間 多項時間アルゴリズムの計算量 O (n k ) n O (k ) 指数時間アルゴリズムの計算量 指数時間アルゴリズムの計算時間は多項時間 アルゴリズムよりも遥かに早く増加する 大きいnについてはほとんど実用にならない

185 最悪時計算量と平均時計算量 入力によって計算量が異なる場合がある 例 データを探索する場合 最悪時計算量 たまたま最初に捜したところに目的のデータがあれば すぐ に終わる 目的のデータが最後まで見つからなければ時間がかかる もっとも都合が悪い入力に対してかかる計算量 平均時計算量 入力に対して仮定を置いたとき たとえば探索される要 素がある位置にある確率が一様 の計算量の期待値

186 探索問題 同じ問題に対して異なる計算量のアルゴリズムが ある典型的な例 探索 データの中に特定の要素が含まれるか調べる ソート データを順番に並べ替える 最短経路探索 ここでは簡単な探索問題を扱う データx1, x2,..., xnの中に y があるかどうか探す 線形探索 簡単な方法 二分探索

187 線形探索 最も簡単な探索法 最初から順番に捜す 見つかったら終わり i 線形探索 iを1からnまで変化させながら もし x[i]=yならば 見つかった を返し 終了 を繰り返す 見つからなかった を返す

188 線形探索の計算量 最悪時計算量 O (n) T (n)=n 平均時計算量 どの位置で見つかる確率も同じだと仮定 i番目に見つかる確率 P (i)=1/n n n n(n+ 1) n+ 1 1 T (n)= P (i)i= i= = n i=1 2n 2 i=1 O (n)

189 もっと高速な探索 もしデータが順番に並んでいたとしたら 小さいデータ 大きいデータ 昇順 (ascending) 大きいデータ 小さいデータ 降順 (descending) 最大値と最小値はすぐわかる 探索値が小さければ前の方を 大きければ後ろのほう を探せばよい 高速な探索 探索値がデータの前半と後半のどちらにあるのかを調 べる

190 二分探索 入力x1 x2... xnと仮定する 真ん中あたりの値を調べる 1+ n h= 2 x h= y 探索値が見つかった x h< y 探索値は中央より後にある x h> y 探索値は中央より前にある 次の探索範囲が半分になる

191 二分探索 探索値 右にある 左にある 当たり

192 二分探索 二分探索 b 1, e n 繰り返し h (b+e)/2 もし x[h]=y ならば 見つかった を返し 終了 そうでなく b e ならば 見つからなかった を返し 終了 そうでなく x[h]<y ならば b h+1 そうでなければ e h-1 を実行する

193 二分探索の計算量 入力サイズが2倍 比較が定数回増える ループが1回多い 入力サイズ 2N 比較回数 KN Kは定数 入力サイズ n 比較回数 K log2 n = T (n) 計算量のオーダーはO(log n)

主記憶の使われ方 システム領域 SP スタックポインタ システム用 スタック用 プログラム起動時に OS によって確 保される (SP が決められる ) プログラム用 メインルーチン プログラム領域 命令コードの列定数 変数用領域サブルーチン命令コードの列 先頭番地は リンク時に OS によって決め

主記憶の使われ方 システム領域 SP スタックポインタ システム用 スタック用 プログラム起動時に OS によって確 保される (SP が決められる ) プログラム用 メインルーチン プログラム領域 命令コードの列定数 変数用領域サブルーチン命令コードの列 先頭番地は リンク時に OS によって決め Copyright 守屋悦朗 2005 コンピュータの仕組み (2) ソフトウェア 3.3 アセンブラプログラミング (CASLⅡ) 情報処理技術者試験基本情報技術者試験 (http://www.jitec.jp/index.html) では 仮想コンピュータ (16ビットのワードマシン 主記憶容量 64KW)COMETⅡを定義し COMETⅡ のためのアセンブリ言語 CASLⅡを定めている COMETⅡとCASLⅡの仕様は情報処理技術者試験センターのウェブサイト

More information

main.dvi

main.dvi 20 II 7. 1 409, 3255 e-mail: namba@faculty.chiba-u.jp 2 1 1 1 4 2 203 2 1 1 1 5 503 1 3 1 2 2 Web http://www.icsd2.tj.chiba-u.jp/~namba/lecture/ 1 2 1 5 501 1,, \,", 2000 7. : 1 1 CPU CPU 1 Intel Pentium

More information

コンピュータ工学Ⅰ

コンピュータ工学Ⅰ コンピュータ工学 Ⅰ 中央処理装置 Rev. 2019.01.16 コンピュータの基本構成と CPU 内容 ➊ CPUの構成要素 ➋ 命令サイクル ➌ アセンブリ言語 ➍ アドレッシング方式 ➎ CPUの高速化 ➏ CPUの性能評価 コンピュータの構成装置 中央処理装置 (CPU) 主記憶装置から命令を読み込み 実行を行う 主記憶装置 CPU で実行するプログラム ( 命令の集合 ) やデータを記憶する

More information

コンピュータ工学Ⅰ

コンピュータ工学Ⅰ コンピュータ工学 Ⅰ Rev. 2018.01.20 コンピュータの基本構成と CPU 内容 ➊ CPUの構成要素 ➋ 命令サイクル ➌ アセンブリ言語 ➍ アドレッシング方式 ➎ CPUの高速化 ➏ CPUの性能評価 コンピュータの構成装置 中央処理装置 (CPU) 主記憶装置から命令を読み込み 実行を行う 主記憶装置 CPU で実行するプログラム ( 命令の集合 ) やデータを記憶する 補助記憶装置

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション コンピュータアーキテクチャ 第 7 週命令セットアーキテクチャ ( 命令の表現 命令の実行の仕組 ) 2013 年 11 月 6 日 金岡晃 授業計画 第 1 週 (9/25) 第 2 週 (10/2) 第 3 週 (10/9) 第 4 週 (10/16) 第 5 週 (10/23) 第 6 週 (10/30) 第 7 週 (11/6) 授業概要 2 進数表現 論理回路の復習 2 進演算 ( 数の表現

More information

計算機アーキテクチャ

計算機アーキテクチャ 計算機アーキテクチャ 第 11 回命令実行の流れ 2014 年 6 月 20 日 電気情報工学科 田島孝治 1 授業スケジュール ( 前期 ) 2 回日付タイトル 1 4/7 コンピュータ技術の歴史と コンピュータアーキテクチャ 2 4/14 ノイマン型コンピュータ 3 4/21 コンピュータのハードウェア 4 4/28 数と文字の表現 5 5/12 固定小数点数と浮動小数点表現 6 5/19 計算アーキテクチャ

More information

ex04_2012.ppt

ex04_2012.ppt 2012 年度計算機システム演習第 4 回 2012.05.07 第 2 回課題の補足 } TSUBAMEへのログイン } TSUBAMEは学内からのログインはパスワードで可能 } } } } しかし 演習室ではパスワードでログインできない設定 } 公開鍵認証でログイン 公開鍵, 秘密鍵の生成 } ターミナルを開く } $ ssh-keygen } Enter file in which to save

More information

情報処理Ⅰ

情報処理Ⅰ Java フローチャート -1- フローチャート ( 流れ図 ) プログラムの処理手順 ( アルゴリズム ) を図示したもの 記号の種類は下記のとおり 端子記号 ( 開始 終了 ) 処理記号計算, 代入等 条件の判定 条件 No ループ処理 LOOP start Yes データの入力 出力 print など 定義済み処理処理名 end サンプルグログラム ( 大文字 小文字変換 ) 大文字を入力して下さい

More information

プログラミング実習I

プログラミング実習I プログラミング実習 I 03 変数と式 人間システム工学科井村誠孝 m.imura@kwansei.ac.jp 3.1 変数と型 変数とは p.60 C 言語のプログラム中で, 入力あるいは計算された数や文字を保持するには, 変数を使用する. 名前がついていて値を入れられる箱, というイメージ. 変数定義 : 変数は変数定義 ( 宣言 ) してからでないと使うことはできない. 代入 : 変数には値を代入できる.

More information

CASL入門

CASL入門 3 章 アセンブラ言語 CASLⅡ の仕様 ここでは アセンブラ言語の説明をします ちょっと待て 第 2 章の話は アセンブラ言語の話ではなかったのか と思われた人はいませんでしょうか 一般に プログラム という場合 その構成要素は次の 3 つに分かれます 1 動作のための命令加算 減算 比較などの命令 2 領域確保や定数定義など 動作しない部分 3 プログラム名の定義などこのうち 1が第 3 章で説明した部分にあたります

More information

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n を入力してもらい その後 1 から n までの全ての整数の合計 sum を計算し 最後にその sum

More information

スライド 1

スライド 1 東北大学工学部機械知能 航空工学科 2015 年度 5 セメスター クラス D 計算機工学 6. MIPS の命令と動作 演算 ロード ストア ( 教科書 6.3 節,6.4 節 ) 大学院情報科学研究科鏡慎吾 http://www.ic.is.tohoku.ac.jp/~swk/lecture/ レジスタ間の演算命令 (C 言語 ) c = a + b; ( 疑似的な MIPS アセンブリ言語 )

More information

C プログラミング 1( 再 ) 第 4 回 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 1

C プログラミング 1( 再 ) 第 4 回 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 1 C プログラミング 1( 再 ) 第 4 回 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 1 前回の復習 関数を作る : 何を引数として どういう計算をし 何を返すか 関数についての注意 : * main 関数で使われている変数と同じ名前の変数があっても それらには何ら関係はない * 関数名と同じ変数は その関数内では使わないようにする ( 紛らわしさを少なくするため

More information

ソフトウェア基礎技術研修

ソフトウェア基礎技術研修 算術論理演算ユニットの設計 ( 教科書 4.5 節 ) yi = fi (x, x2, x3,..., xm) (for i n) 基本的な組合せ論理回路 : インバータ,AND ゲート,OR ゲート, y n 組合せ論理回路 ( 復習 ) 組合せ論理回路 : 出力値が入力値のみの関数となっている論理回路. 論理関数 f: {, } m {, } n を実現.( フィードバック ループや記憶回路を含まない

More information

COMET II のプログラミング ここでは機械語レベルプログラミングを学びます 1

COMET II のプログラミング ここでは機械語レベルプログラミングを学びます 1 COMET II のプログラミング ここでは機械語レベルプログラミングを学びます 1 ここでは機械命令レベルプログラミングを学びます 機械命令の形式は学びましたね機械命令を並べたプログラムを作ります 2 その前に プログラミング言語について 4 プログラミング言語について 高級言語 (Java とか C とか ) と機械命令レベルの言語 ( アセンブリ言語 ) があります 5 プログラミング言語について

More information

メソッドのまとめ

メソッドのまとめ メソッド (4) 擬似コードテスト技法 http://java.cis.k.hosei.ac.jp/ 授業の前に自己点検以下のことがらを友達に説明できますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか メソッドの仮引数 実引数 戻り値とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか

More information

論理と計算(2)

論理と計算(2) 情報科学概論 Ⅰ アルゴリズムと計算 亀山幸義 http://logic.cs.tsukuba.ac.jp/~kam 計算とは? コンピュータが計算できることは? 1 2 関数 = 計算? NO 部分関数と計算 入力 1 入力 2 関数 出力 入力 1 入力 2 部分関数 出力 停止しない 入力 1 入力 2 コンピュータ 止まらないことがある出力 3 入力 1 入力 2 コンピュータ 出力 停止しない

More information

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く 変数 入出力 演算子ここまでに C 言語プログラミングの様子を知ってもらうため printf 文 変数 scanf 文 if 文を使った簡単なプログラムを紹介した 今回は変数の詳細について習い それに併せて使い方が増える入出力処理の方法を習う また 演算子についての復習と供に新しい演算子を紹介する 変数の宣言プログラムでデータを取り扱う場合には対象となるデータを保存する必要がでてくる このデータを保存する場所のことを

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 2018/10/05 竹島研究室創成課題 第 2 回 C 言語演習 変数と演算 東京工科大学 加納徹 前回の復習 Hello, world! と表示するプログラム 1 #include 2 3 int main(void) { 4 printf("hello, world! n"); 5 return 0; 6 } 2 プログラム実行の流れ 1. 作業ディレクトリへの移動 $ cd

More information

Java講座

Java講座 ~ 第 1 回 ~ 情報科学部コンピュータ科学科 2 年竹中優 プログラムを書く上で Hello world 基礎事項 演算子 構文 2 コメントアウト (//, /* */, /** */) をしよう! インデントをしよう! 変数などにはわかりやすい名前をつけよう! 要するに 他人が見て理解しやすいコードを書こうということです 3 1. Eclipse を起動 2. ファイル 新規 javaプロジェクト

More information

CASL入門

CASL入門 4 章 機械語の設計 ここでは 機械語の設計をしてみましょう 機械語の設計! そんなことができるのでしょうか 情報処理技術者試験の CASLⅡ 説明書の参考資料には 命令後の構成は定義しないが と記載されています アセンブラ言語を理解するためには機械語の理解が非常に大切になりますし 自分で設計してみれば格段に理解が容易になります そこで 定義されていないなら 定義してしまおう というわけです CASLⅡが動くコンピュータである

More information

論理と計算(2)

論理と計算(2) 情報科学概論 Ⅰ アルゴリズムと計算量 亀山幸義 http://logic.cs.tsukuba.ac.jp/~kam 亀山担当分の話題 アルゴリズムと計算量 Fibonacci 数列の計算を例にとり アルゴリズムと計算量とは何か 具体的に学ぶ 良いアルゴリズムの設計例として 整列 ( ソーティング ) のアルゴリズムを学ぶ 2 Fibonacci 数 () Fibonacci 数 (2) = if

More information

ex05_2012.pptx

ex05_2012.pptx 2012 年度計算機システム演習第 5 回 2012.05.25 高水準言語 (C 言語 ) アセンブリ言語 (MIPS) 機械語 (MIPS) コンパイラ アセンブラ 今日の内容 サブルーチンの実装 Outline } ジャンプ 分岐命令 } j, jr, jal } レジスタ衝突 回避 } caller-save } callee-save 分岐命令 ( 復習 ) } j label } Jump

More information

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき

More information

Microsoft PowerPoint - ProcML-12-3.ppt

Microsoft PowerPoint - ProcML-12-3.ppt プロセッサと 年次前次前期 ( 第 回 ) 進数の加減算 (overflow( overflow) 演習 次の ビット演算の結果は overflow か? () + + () + + 答 答 中島克人 情報メディア学科 nakajima@im.dendai.ac.jp () - = + + 答 進数の加減算 (overflow( overflow) 演習 次の ビット演算の結果は overflow

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 仮想マシン () 仮想マシン 復習 仮想マシンの概要 hsm 仮想マシン プログラム言語の処理系 ( コンパイラ ) 原始プログラム (Source program) コンパイラ (Compiler) 目的プログラム (Object code) 原始言語 (Source language) 解析 合成 目的言語 (Object Language) コンパイルする / 翻訳する (to compile

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション コンパイラとプログラミング言語 第 11 週 条件分岐文と繰り返し文のコード生成 2014 年 6 月 18 日 金岡晃 授業計画 第 1 週 (4/9) コンパイラの概要 第 8 週 (5/28) 下向き構文解析 / 構文解析プログラム 第 2 週 (4/16) コンパイラの構成 第 9 週 (6/4) 中間表現と意味解析 第 3 週 (4/23) プログラミング言語の形式的な記述 第 10 週

More information

Microsoft Word - 3new.doc

Microsoft Word - 3new.doc プログラミング演習 II 講義資料 3 ポインタ I - ポインタの基礎 1 ポインタとは ポインタとはポインタは, アドレス ( データが格納されている場所 ) を扱うデータ型です つまり, アドレスを通してデータを間接的に処理します ポインタを使用する場合の, 処理の手順は以下のようになります 1 ポインタ変数を宣言する 2 ポインタ変数へアドレスを割り当てる 3 ポインタ変数を用いて処理 (

More information

アセンブラ入門(CASL II) 第3版

アセンブラ入門(CASL II) 第3版 CASLDV i COMET II COMET II CASL II COMET II 1 1 44 (1969 ) COMETCASL 6 (1994 ) COMETCASL 13 (2001 ) COMETCASL COMET IICASL II COMET IICASL II CASL II 2001 1 3 3 L A TEX 2 CASL II COMET II 6 6 7 Windows(Windows

More information

Microsoft PowerPoint - ca ppt [互換モード]

Microsoft PowerPoint - ca ppt [互換モード] 大阪電気通信大学情報通信工学部光システム工学科 2 年次配当科目 コンピュータアルゴリズム 良いアルゴリズムとは 第 2 講 : 平成 20 年 10 月 10 日 ( 金 ) 4 限 E252 教室 中村嘉隆 ( なかむらよしたか ) 奈良先端科学技術大学院大学助教 y-nakamr@is.naist.jp http://narayama.naist.jp/~y-nakamr/ 第 1 講の復習

More information

PowerPoint Presentation

PowerPoint Presentation プログラミング基礎 第 2 週 (4,5,6 回 ) 2011-10-07 出村公成 この資料の再配布を禁止します 予定 プログラミング入門 (45 分 ) 変数 入出力 分岐 演習 (90 分 ) タッチタイプ練習 統合開発環境 Codeblocksの使い方 教科書例題の打ち込みと実行 プログラミング入門 C 言語の簡単な例を体験 変数 入出力 分岐 プログラムの例リスト 2.1 改 #include

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション コンパイラとプログラミング言語 第 10 週 Java 仮想マシンとその機械語 2014 年 6 月 11 日 金岡晃 授業計画 第 1 週 (4/9) コンパイラの概要 第 8 週 (5/28) 下向き構文解析 / 構文解析プログラム 第 2 週 (4/16) コンパイラの構成 第 9 週 (6/4) 中間表現と意味解析 第 3 週 (4/23) プログラミング言語の形式的な記述 第 10 週 (6/11)

More information

第 1 回 C 言語講座 1. コンピュータって? だいたいは 演算装置 制御装置 記憶装置 入出力装置から構成されている 演算装置 CPU の一部で実際に計算を行う装置 制御装置 CPU の一部で演算装置や入出力装置 記憶装置の読み書きなどを制御する装置 記憶装置プログラムや情報 データを一時的

第 1 回 C 言語講座 1. コンピュータって? だいたいは 演算装置 制御装置 記憶装置 入出力装置から構成されている 演算装置 CPU の一部で実際に計算を行う装置 制御装置 CPU の一部で演算装置や入出力装置 記憶装置の読み書きなどを制御する装置 記憶装置プログラムや情報 データを一時的 第 1 回 C 言語講座 1. コンピュータって? だいたいは 演算装置 制御装置 記憶装置 入出力装置から構成されている 演算装置 CPU の一部で実際に計算を行う装置 制御装置 CPU の一部で演算装置や入出力装置 記憶装置の読み書きなどを制御する装置 記憶装置プログラムや情報 データを一時的 あるいは半永久的に保存する装置 CPU が直接読み書きできる主記憶装置 ( メモリ ) と データの保管などに使われる補助記憶装置

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 4 回目演算子 今日の講義で学ぶ内容 演算子とオペランド 式 様々な演算子 代表的な演算子の使用例 演算子とオペランド 演算子 演算の種類です例えば + - * / 掛け算の記号は ではなく *( アスタリスク ) を使います割り算の記号は ではなく /( スラッシュ ) を使います オペランド 演算の対象です例えば 5( 値 ) num( 変数 ) 式 演算子とオペランドの組み合わせにより構成される数式です式は演算結果をもちます

More information

文字コード略歴 よこやままさふみ社内勉強会 2012/05/18 文字コード略歴 Powered by Rabbit 2.0.6

文字コード略歴 よこやままさふみ社内勉強会 2012/05/18 文字コード略歴 Powered by Rabbit 2.0.6 文字コード略歴 よこやままさふみ社内勉強会 2012/05/18 自己紹介 横山昌史 入社 4 年目 プログラマ etc... 所属プロジェクト Java UNIX 雑用 etc... 文字コードの " るつぼ " Rabbit について プレゼンテーションツール 実装 : Ruby/GTK 動作 : UNIX/Win/Mac 文章とデザインの分離 バージョン管理しやすい 文字コードとは 文字をコンピュータで扱うための符号化方式

More information

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド メソッド ( 教科書第 7 章 p.221~p.239) ここまでには文字列を表示する System.out.print() やキーボードから整数を入力する stdin.nextint() などを用いてプログラムを作成してきた これらはメソッドと呼ばれるプログラムを構成する部品である メソッドとは Java や C++ などのオブジェクト指向プログラミング言語で利用されている概念であり 他の言語での関数やサブルーチンに相当するが

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 仮想マシン (2), コード生成 http://cis.k.hosei.ac.jp/~asasaki /lect/compiler/2007-1204.pdf ( 訂正版 ) 1 概要 仮想マシン 概要 ( 復習 ) 制御命令 出力命令 コード生成 式のコード生成 文 文の列のコード生成 記号表 2 演習で作るコンパイラの例 test.hcc Int main() { int i j; i = 3;

More information

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1 4. ソート ( 教科書 p.205-p.273) 整列すなわちソートは アプリケーションを作成する際には良く使われる基本的な操作であり 今までに数多くのソートのアルゴリズムが考えられてきた 今回はこれらソートのアルゴリズムについて学習していく ソートとはソートとは与えられたデータの集合をキーとなる項目の値の大小関係に基づき 一定の順序で並べ替える操作である ソートには図 1 に示すように キーの値の小さいデータを先頭に並べる

More information

Microsoft PowerPoint - algo ppt [互換モード]

Microsoft PowerPoint - algo ppt [互換モード] ( 復習 ) アルゴリズムとは アルゴリズム概論 - 探索 () - アルゴリズム 問題を解くための曖昧さのない手順 与えられた問題を解くための機械的操作からなる有限の手続き 機械的操作 : 単純な演算, 代入, 比較など 安本慶一 yasumoto[at]is.naist.jp プログラムとの違い プログラムはアルゴリズムをプログラミング言語で表現したもの アルゴリズムは自然言語でも, プログラミング言語でも表現できる

More information

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤 情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤 2017.12.7 前回の演習問題の解答例 1. 四則演算のできる計算機のプログラム ( 括弧も使える ) 2. 実数の扱える四則演算の計算機のプログラム ( 実数 も というより実数 が が正しかったです ) 3. 変数も扱える四則演算の計算機のプログラム ( 変数と実数が扱える ) 演習問題 1 で行うべきこと

More information

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 講座を行う前に 自己紹介 僕と上回生について 1 年生同士で少しお話しよう! オリエンテーションの宿題 アルゴロジック http://home.jeita.or.jp/is/highschool/algo/index3.html どこまでできましたか? あまりできなかった人はこれから全部クリアしよう! 2016 年度 C 言語講座 第一回目 2016/6/11 fumi 今回の目標 プログラムを書いて実行するやり方を覚える

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション ようこそ COBOL へ! 2018/08/17 伊東 輝 COBOL とは? 1959 年に事務処理用に開発された手続き型言語であり ソースコードの記述内容を上から順番に実行する言語である 約 60 年前から存在する言語でありながら 未だに基本情報処理技術者の午後試験に出題され 金融系システム等のレガシーシステムでは現在も COBOL のプログラムが稼働している 今回は COBOL のコーディングの基礎を発表する

More information

Microsoft PowerPoint - 7.Arithmetic.ppt

Microsoft PowerPoint - 7.Arithmetic.ppt 第 7 章デジタル演算回路 1 デジタル信号処理音声, 音楽, 通信信号 信号 = 符号付き 2 進データ 負の数値の表現方法 2 2 進数 n ビット n-1 =Σb i 2 i 0 2 の補数 +=2 n n-1 n-1 2 n =1+Σb i 2 i +Σb i 2 i 0 0 n-1 =2 n ー =1+Σb i 2 i 0 3 2 進数の補数 2 の補数 各桁のビットを反転した後で最下位に

More information

Microsoft Word - no01.doc

Microsoft Word - no01.doc 応用プログラミング I II 2009.4.7 1. プログラミングとは 1.1 ハードウエアとソフトウエアパソコンをはじめとするコンピュータは ハードウエア といわれます このハードウエアだけで何ができるかといえば単なる計算だけです もちろんそれを表示することもできませんし キーボードから文字を打つこともできません 計算ができるといっても 数字を入力できないのですから数値を与えることすらできないのです

More information

命令セットの構成例 a) 算術 演算命令 例 )ADD dest, source : dest dest + source SUB dest, source : dest dest - source AND dest, source : dest dest AND source SHR reg, c

命令セットの構成例 a) 算術 演算命令 例 )ADD dest, source : dest dest + source SUB dest, source : dest dest - source AND dest, source : dest dest AND source SHR reg, c 第 11 回機械語とアーキテクチャ コンピュータは, 記号で組み立てられ, 記号で動く機械 : ソフトウェアソフトウェア としても理解されなければならない ソフトウェアの最も下位レベルのしくみが ( 命令セット ) アーキテクチャ である 講義では命令符号 ( 機械語 ) の構成と種類についてまとめる また, 機械語を効率良く実行するために採用されている技術について紹介する 機械語とアセンブリ言語

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション コンパイラとプログラミング言語 第 3 4 週 プログラミング言語の形式的な記述 2014 年 4 月 23 日 金岡晃 授業計画 第 1 週 (4/9) コンパイラの概要 第 8 週 (5/28) 下向き構文解析 / 構文解析プログラム 第 2 週 (4/16) コンパイラの構成 第 9 週 (6/4) 中間表現と意味解析 第 3 週 (4/23) プログラミング言語の形式的な記述 第 10 週

More information

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint - CproNt02.ppt [互換モード] 第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント

More information

Microsoft PowerPoint - 11Web.pptx

Microsoft PowerPoint - 11Web.pptx 計算機システムの基礎 ( 第 10 回配布 ) 第 7 章 2 節コンピュータの性能の推移 (1) コンピュータの歴史 (2) コンピュータの性能 (3) 集積回路の進歩 (4) アーキテクチャ 第 4 章プロセッサ (1) プロセッサの基本機能 (2) プロセッサの構成回路 (3) コンピュータアーキテクチャ 第 5 章メモリアーキテクチャ 1. コンピュータの世代 計算する機械 解析機関 by

More information

PowerPoint Presentation

PowerPoint Presentation 工学部 6 7 8 9 10 組 ( 奇数学籍番号 ) 担当 : 長谷川英之 情報処理演習 第 7 回 2010 年 11 月 18 日 1 今回のテーマ 1: ポインタ 変数に値を代入 = 記憶プログラムの記憶領域として使用されるものがメモリ ( パソコンの仕様書における 512 MB RAM などの記述はこのメモリの量 ) RAM は多数のコンデンサの集合体 : 電荷がたまっている (1)/ いない

More information

1/8 ページ Java 基礎文法最速マスター Java Javaの文法一覧です 他の言語をある程度知っている人はこれを読めばJavaの基礎をマスターしてJavaを書くことができるようになっています 簡易リファレンスとしても利用できると思いますので これは足りないと思うものがあれば教えてください 1. 基礎 class の作成プログラムはclassに記述します たとえばSampleという名前のclassを作る場合

More information

Microsoft PowerPoint - 11.pptx

Microsoft PowerPoint - 11.pptx ポインタと配列 ポインタと配列 配列を関数に渡す 法 課題 : 配列によるスタックの実現 ポインタと配列 (1/2) a が配列であるとき, 変数の場合と同様に, &a[0] [] の値は配列要素 a[0] のアドレス. C 言語では, 配列は主記憶上の連続領域に割り当てられるようになっていて, 配列名 a はその配列に割り当てられた領域の先頭番地となる. したがって,&a[0] と a は同じ値.

More information

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft PowerPoint - 計算機言語 第7回.ppt 計算機言語第 7 回 長宗高樹 目的 関数について理解する. 入力 X 関数 f 出力 Y Y=f(X) 関数の例 関数の型 #include int tasu(int a, int b); main(void) int x1, x2, y; x1 = 2; x2 = 3; y = tasu(x1,x2); 実引数 printf( %d + %d = %d, x1, x2, y);

More information

アルゴリズムとデータ構造

アルゴリズムとデータ構造 講義 アルゴリズムとデータ構造 第 2 回アルゴリズムと計算量 大学院情報科学研究科情報理工学専攻情報知識ネットワーク研究室喜田拓也 講義資料 2018/5/23 今日の内容 アルゴリズムの計算量とは? 漸近的計算量オーダーの計算の方法最悪計算量と平均計算量 ポイント オーダー記法 ビッグオー (O), ビッグオメガ (Ω), ビッグシータ (Θ) 2 お風呂スケジューリング問題 お風呂に入る順番を決めよう!

More information

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

書式に示すように表示したい文字列をダブルクォーテーション () の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf( 情報処理基礎 ); printf(c 言語の練習 ); printf 情報処理基礎 C 言語についてプログラミング言語は 1950 年以前の機械語 アセンブリ言語 ( アセンブラ ) の開発を始めとして 現在までに非常に多くの言語が開発 発表された 情報処理基礎で習う C 言語は 1972 年にアメリカの AT&T ベル研究所でオペレーションシステムである UNIX を作成するために開発された C 言語は現在使われている多数のプログラミング言語に大きな影響を与えている

More information

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ 4 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プログラミング技術 工業 333 実教出版 ) 共通 : 科目 プログラミング技術 のオリエンテーション プログラミング技術は

More information

ガイダンス

ガイダンス 情報科学 B 第 2 回変数 1 今日やること Java プログラムの書き方 変数とは何か? 2 Java プログラムの書き方 3 作業手順 Java 言語を用いてソースコードを記述する (Cpad エディタを使用 ) コンパイル (Cpad エディタを使用 ) 実行 (Cpad エディタを使用 ) エラーが出たらどうしたらよいか??? 4 書き方 これから作成する Hello.java 命令文 メソッドブロック

More information

プログラミング入門1

プログラミング入門1 プログラミング入門 1 第 9 回 メソッド (3) 授業の前に自己点検 以下の質問に答えられますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか メソッドの仮引数 実引数 戻り値とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか 戻り値はどのように利用しますか 変数のスコープとは何ですか

More information

Microsoft Word - 商業-3

Microsoft Word - 商業-3 科目 プログラミング の効果的な指導法について -Java 言語を活用して- 市立 高等学校 ( 商業 ) 1 はじめに (1) 主題設定の理由平成 21 年 3 月に新しい高等等学校学習指導要領が告示された 経営情報分野野の プログラミング では, 従来の手続き型言語語などに加えて, オブジェクト指向型言語を意識識した記述が見られるようになった オブジェクトト指向 とは, プログラムとデータを一つのまとまりとして,

More information

講習No.9

講習No.9 日本語は通常 2 バイトの文字コード.JIS コード, シフト JIS コード, Unicode (UTF-8) 等の様々な文字コードがある. アスキーコード表 (ASCII code) アスキーコード ( 値 ) 漢字変換無しでキーボードから直接入力できる半角文字 32 48 0 64 @ 80 P 96 ` 112 p 33! 49 1 65 A 81 Q 97 a 113 q 34 " 50

More information

Microsoft PowerPoint - 05.pptx

Microsoft PowerPoint - 05.pptx アルゴリズムとデータ構造第 5 回 : データ構造 (1) 探索問題に対応するデータ構造 担当 : 上原隆平 (uehara) 2015/04/17 アルゴリズムとデータ構造 アルゴリズム : 問題を解く手順を記述 データ構造 : データや計算の途中結果を蓄える形式 計算の効率に大きく影響を与える 例 : 配列 連結リスト スタック キュー 優先順位付きキュー 木構造 今回と次回で探索問題を例に説明

More information

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63> C 言語講座第 2 回 作成 : ハルト 前回の復習基本的に main () の中カッコの中にプログラムを書く また 変数 ( int, float ) はC 言語では main() の中カッコの先頭で宣言する 1 画面へ出力 printf() 2 キーボードから入力 scanf() printf / scanf で整数を表示 / 入力 %d 小数を表示 / 入力 %f 3 整数を扱う int 型を使う

More information

Microsoft Word - no02.doc

Microsoft Word - no02.doc 使い方 1ソースプログラムの入力今回の講義では C++ 言語用の統合環境ソフトといわれるプログラムを利用します デスクトップにある CPad for C++ のアイコン ( 右参照 ) をダブルクリ ックしましょう ( 同じアイコンで Java_pad とかい エディタ部 てあるものもありますので気をつけてください ) これで 起 動します 統合環境を立ち上げると エディタ部とメッセージ部をもった画面が出てきます

More information

memo

memo 数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int

More information

プログラミング入門1

プログラミング入門1 プログラミング入門 1 第 5 回 繰り返し (while ループ ) 授業開始前に ログオン後 不要なファイルを削除し て待機してください Java 1 第 5 回 2 参考書について 参考書は自分にあったものをぜひ手元において自習してください 授業の WEB 教材は勉強の入り口へみなさんを案内するのが目的でつくられている これで十分という訳ではない 第 1 回に紹介した本以外にも良書がたくさんある

More information

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用 RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用体型のローカル変数を文字列操作関数で操作する場合の注意事項 (RXC#013) 配列型構造体または共用体の配列型メンバから読み出した値を動的初期化に用いる場合の注意事項

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 5 回目演算子の優先順位と変数の型変換 今日の講義で学ぶ内容 演算子の優先順位 優先順位の変更の方法 キャスト演算子と型変換 演算子の優先順位 演算子の優先順位 式を計算するときの演算の順序です例えば a=b*c+d; では乗算を先に計算するというルールです ( 主な演算子の優先順位 ) 演算子 名前 結合規則 ++ 後置インクリメント 左 -- 後置デクリメント 左!

More information

スライド 1

スライド 1 東北大学工学部機械知能 航空工学科 2019 年度クラス C D 情報科学基礎 I 7. MIPS の命令と動作 分岐 ジャンプ 関数呼出し ( 教科書 7 章命令一覧は p.113) 大学院情報科学研究科 鏡慎吾 http://www.ic.is.tohoku.ac.jp/~swk/lecture/ 分岐 ジャンプ命令 条件文や繰り返し文などを実現するには, 命令の実行順の制御が必要 (C 言語

More information

講習No.8

講習No.8 配列変数の要素 復習 int x[5]; x[0] x[1] x[2] x[3] x[4] 5 は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字, またはインデックスと呼ぶ! 重要! インデックスの最大値 = 要素数ー 1 int x = 7; float aa[x]; int x = 7; float aa[7];! 重要! 配列宣言時の要素数は定数でなければならない

More information

プログラミングA

プログラミングA プログラミング A 第 5 回 場合に応じた処理 繰り返し 2017 年 5 月 15 日 東邦大学金岡晃 前回の復習 (1) このプログラムを作成し実行してください 1 前回の復習 (2) このプログラムを作成し実行してください 2 前回の復習 (3) 3 前回の復習 演算子 代入演算子 インクリメント シフト演算子 型変換 4 場合に応じた処理 5 こういうプログラムを作りたい 5 教科のテスト

More information

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y  小幡智裕 Java Script プログラミング入門 3-6~3-7 茨城大学工学部情報工学科 08T4018Y 小幡智裕 3-6 組み込み関数 組み込み関数とは JavaScript の内部にあらかじめ用意されている関数のこと ユーザ定義の関数と同様に 関数名のみで呼び出すことができる 3-6-1 文字列を式として評価する関数 eval() 関数 引数 : string 式として評価する文字列 戻り値 :

More information

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード] 情報工学実験 II 実験 2 アルゴリズム ( リスト構造とハッシュ ) 実験を始める前に... C 言語を復習しよう 0. プログラム書ける? 1. アドレスとポインタ 2. 構造体 3. 構造体とポインタ 0. プログラム書ける? 講義を聴いているだけで OK? 言語の要素技術を覚えれば OK? 目的のプログラム? 要素技術 データ型 配列 文字列 関数 オブジェクト クラス ポインタ 2 0.

More information

Microsoft Word - 19-d代 試é¨fi 解ç�fl.docx

Microsoft Word - 19-d代 試é¨fi 解ç�fl.docx 2019 年度ディジタル代数期末試験解答例 再評価試験は期末試験と同程度の難しさである. しっかり準備して受けるように. 1. アドレスが 4 バイトで表わされた画像処理専用プロセッサが幾つかのデータを吐き出して停まってしまった. そのデータの 1 つはレジスタ R0 の中身で,16 進表示すると (BD80) 16 であった. このデータに関して, 以下の問に対する回答を対応する箱内に書け. (1)

More information

講習No.1

講習No.1 プログラムはどこに保存され, どこで実行されるのか? 復習 ハードディスク キーボード Central Processing Unit 例えば i7, ARM, Cortex-A17 ディスプレイ 例えば 4G バイト メモリ プログラムは, ワープロ文章などと同様, ハードディスクなどにファイルとして保存されている. プログラムは, メモリ上に呼び出されて ( ロード ) 実行される. プログラムの作成

More information

Microsoft PowerPoint - 06.pptx

Microsoft PowerPoint - 06.pptx アルゴリズムとデータ構造第 6 回 : 探索問題に対応するデータ構造 (2) 担当 : 上原隆平 (uehara) 2015/04/22 内容 スタック (stack): 最後に追加されたデータが最初に取り出される 待ち行列 / キュー (queue): 最初に追加されたデータが最初に取り出される ヒープ (heap): 蓄えられたデータのうち小さいものから順に取り出される 配列による実装 連結リストによる実装

More information

Microsoft Word - no103.docx

Microsoft Word - no103.docx 次は 数える例です ex19.c /* Zeller の公式によって 1 日の曜日の分布を求めるプログラム */ int year, month, c, y, m, wnumber, count[7] = {0, i; for(year = 2001; year

More information

Microsoft PowerPoint - 09.pptx

Microsoft PowerPoint - 09.pptx 情報処理 Ⅱ 第 9 回 2014 年 12 月 22 日 ( 月 ) 関数とは なぜ関数 関数の分類 自作関数 : 自分で定義する. ユーザ関数 ユーザ定義関数 などともいう. 本日のテーマ ライブラリ関数 : 出来合いのもの.printf など. なぜ関数を定義するのか? 処理を共通化 ( 一般化 ) する プログラムの見通しをよくする 機能分割 ( モジュール化, 再利用 ) 責任 ( あるいは不具合の発生源

More information

sinfI2005_VBA.doc

sinfI2005_VBA.doc sinfi2005_vba.doc MS-ExcelVBA 基礎 (Visual Basic for Application). 主な仕様一覧 () データ型 主なもの 型 型名 型宣言文字 長さ 内容 整数型 Integer % 2 バイト -32,768 32,767 長整数型 Long & 4 バイト -2,47,483,648 2,47,483,647 単精度浮動小数点数 Single 型!

More information

Taro-数値計算の誤差(公開版)

Taro-数値計算の誤差(公開版) 0. 目次 1. 情報落ち 計算のルールを 10 進 4 桁 切り捨て と仮定する 2 つの数の加算では まず小数点が合わされ 大きい数が優先される したがって 12.34 + 0.005678 は 12.34 と計算される このように 絶対値の小さい数を絶対値の大きい数に加えてもほとんど影響を与えない現象を情報落ちという 2. オーバーフロー アンダーフロー 計算結果の絶対値がコンピュータの処理できる最大の数を越えてしまう現象をオーバーフローという

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 講座準備 講座資料は次の URL から DL 可能 https://goo.gl/jnrfth 1 ポインタ講座 2017/01/06,09 fumi 2 はじめに ポインタはC 言語において理解が難しいとされる そのポインタを理解することを目的とする 講座は1 日で行うので 詳しいことは調べること 3 はじめに みなさん復習はしましたか? 4 & 演算子 & 演算子を使うと 変数のアドレスが得られる

More information

スライド 1

スライド 1 東北大学工学部機械知能 航空工学科 2019 年度クラス C D 情報科学基礎 I 6. MIPS の命令と動作 演算 ロード ストア ( 教科書 6.3 節,6.4 節命令一覧は p.113) 大学院情報科学研究科 鏡慎吾 http://www.ic.is.tohoku.ac.jp/~swk/lecture/ レジスタ間の演算命令 (C 言語 ) c = a + b; ( 疑似的な MIPS アセンブリ言語

More information

改訂履歴 Ver 年 ( 平成 30 年 )5 月 25 日ページ変更点 1 試験問題に出題する Java の変更 (Third Edition から Java SE 8 Edition に変更 ) Ver 年 ( 平成 28 年 )10 月 21 日ページ変更点

改訂履歴 Ver 年 ( 平成 30 年 )5 月 25 日ページ変更点 1 試験問題に出題する Java の変更 (Third Edition から Java SE 8 Edition に変更 ) Ver 年 ( 平成 28 年 )10 月 21 日ページ変更点 情報処理技術者試験情報処理安全確保支援士試験 試験で使用する情報技術に関する用語 プログラム言語など Ver.3.1 1. 情報技術に関する用語... 1 2. 記号 図など... 1 3. プログラム言語... 1 4. データベース言語... 1 5. マーク付け言語 ( マークアップ言語 )... 1 6. 表計算ソフトなどのソフトウェアパッケージ... 2 別紙 1 アセンブラ言語の仕様...

More information

ポインタ変数

ポインタ変数 プログラミング及び実習 5 馬青 1 文字処理 数値処理 : 整数 浮動小数点数 単一の文字は と ( シングルクォーテーション ) で囲んで表現される 文字のデータ型は char または int である int を用いたほうが ライブラリの関数の引数の型と一致する 以下は全部 int の使用に統一する 従って int ch; で文字変数を宣言しておくと ch= A ; のように ch に文字 A

More information

プログラミング基礎

プログラミング基礎 C プログラミング Ⅰ 授業ガイダンス C 言語の概要プログラム作成 実行方法 授業内容について 授業目的 C 言語によるプログラミングの基礎を学ぶこと 学習内容 C 言語の基礎的な文法 入出力, 変数, 演算, 条件分岐, 繰り返し, 配列,( 関数 ) C 言語による簡単な計算処理プログラムの開発 到達目標 C 言語の基礎的な文法を理解する 簡単な計算処理プログラムを作成できるようにする 授業ガイダンス

More information

プログラム言語及び演習Ⅲ

プログラム言語及び演習Ⅲ 平成 28 年度後期データ構造とアルゴリズム期末テスト 各問題中のアルゴリズムを表すプログラムは, 変数の宣言が省略されているなど, 完全なものではありませんが, 適宜, 常識的な解釈をしてください. 疑問があれば, 挙手をして質問してください. 時間計算量をオーダ記法で表せという問題では, 入力サイズ n を無限大に近づけた場合の漸近的な時間計算量を表せということだと考えてください. 問題 1 入力サイズが

More information

memo

memo 計数工学プログラミング演習 ( 第 4 回 ) 2016/05/10 DEPARTMENT OF MATHEMATICA INFORMATICS 1 内容 リスト 疎行列 2 連結リスト (inked ists) オブジェクトをある線形順序に並べて格納するデータ構造 単方向連結リスト (signly linked list) の要素 x キーフィールド key ポインタフィールド next x->next:

More information

Microsoft PowerPoint - qcomp.ppt [互換モード]

Microsoft PowerPoint - qcomp.ppt [互換モード] 量子計算基礎 東京工業大学 河内亮周 概要 計算って何? 数理科学的に 計算 を扱うには 量子力学を計算に使おう! 量子情報とは? 量子情報に対する演算 = 量子計算 一般的な量子回路の構成方法 計算って何? 計算とは? 計算 = 入力情報から出力情報への変換 入力 計算機構 ( デジタルコンピュータ,etc ) 出力 計算とは? 計算 = 入力情報から出力情報への変換 この関数はどれくらい計算が大変か??

More information

演習1

演習1 神戸市立工業高等専門学校電気工学科 / 電子工学科専門科目 数値解析 2019.5.10 演習 1 山浦剛 (tyamaura@riken.jp) 講義資料ページ http://r-ccs-climate.riken.jp/members/yamaura/numerical_analysis.html Fortran とは? Fortran(= FORmula TRANslation ) は 1950

More information

プログラミングA

プログラミングA プログラミング A 第 5 回 場合に応じた処理 繰り返し 2019 年 5 月 13 日 東邦大学金岡晃 場合に応じた処理 1 こういうプログラムを作りたい 5 教科のテスト 100 点以上各科目の点数の合計が 100 点未満 おめでとう! これで 100 点越えのプレゼントを獲得! というメッセージを出力 残念!100 点越えのプレゼントまであと ** 点! というメッセージを出力 5 教科の点数の合計が

More information

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

コンピュータ中級B ~Javaプログラミング~  第3回 コンピュータと情報をやりとりするには? Copyright (C) Junko Shirogane, Tokyo Woman's Christian University 2012, All rights reserved. 1 コンピュータ サイエンス 2 第 7 回ソフトウェア 人間科学科コミュニケーション専攻 白銀純子 Copyright (C) Junko Shirogane, Tokyo Woman's Christian University

More information

Microsoft Word - java a.doc

Microsoft Word - java a.doc 4 入出力の基本として ディスプレイへの文字出力と キーボードからの文字入力の方法を学びます 入出力とは何か 標準出力 標準入力 43 4.1. 入出力とは プログラムと外部機器の間でデータをやりとりすることをいいます プログラムから出て行く方向が 出力 プログラムに入って来る方向が 入力 です 出力 外部機器 プログラム 入力 外部機器 外部機器はさまざまな種類があります 出力を行うには ディスプレイ

More information

プログラミング基礎

プログラミング基礎 C プログラミング Ⅰ 条件分岐 if~else if~else 文,switch 文 条件分岐 if~else if~else 文 if~else if~else 文 複数の条件で処理を分ける if~else if~else 文の書式 if( 条件式 1){ 文 1-1; 文 1-2; else if( 条件式 2){ 文 2-1; 文 2-2; else { 文 3-1; 文 3-2; 真条件式

More information

gengo1-8

gengo1-8 問題提起その 1 一文字ずつ文字 ( 数字 ) を読み込み それぞれの文字が何回入力されたかを数えて出力するプログラム int code, count_0=0, count_1=0, count_2=0, count_3=0,..., count_9=0; while( (code=getchar())!= EOF ){ } switch(code){ case 0 : count_0++; break;

More information

Taro-再帰関数Ⅱ(公開版).jtd

Taro-再帰関数Ⅱ(公開版).jtd 0. 目次 6. 2 項係数 7. 二分探索 8. 最大値探索 9. 集合 {1,2,,n} 上の部分集合生成 - 1 - 6. 2 項係数 再帰的定義 2 項係数 c(n,r) は つぎのように 定義される c(n,r) = c(n-1,r) + c(n-1,r-1) (n 2,1 r n-1) = 1 (n 0, r=0 ) = 1 (n 1, r=n ) c(n,r) 0 1 2 3 4 5

More information

プレポスト【解説】

プレポスト【解説】 コース名 : シェルの機能とプログラミング ~UNIX/Linux の効率的使用を目指して ~ 1 UNIX および Linux の主な構成要素は シェル コマンド カーネルです プロセスとは コマンドやプログラムを実行する単位のことなので プロセスに関する記述は誤りです UNIX および Linux のユーザーインターフェースは シェル です コマンドを解釈するという機能から コマンドインタープリタであるともいえます

More information

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること C プログラミング演習 1( 再 ) 4 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順

More information

オートマトンと言語

オートマトンと言語 オートマトンと言語 回目 4 月 8 日 ( 水 ) 章 ( 数式の記法, スタック,BNF 記法 ) 授業資料 http://ir.cs.yamanashi.ac.jp/~ysuzuki/public/automaton/ 授業の予定 ( 中間試験まで ) 回数月日 内容 4 月 日オートマトンとは, オリエンテーション 4 月 8 日 章 ( 数式の記法, スタック,BNF) 3 4 月 5 日

More information

gengo1-2

gengo1-2 変数 プログラム中で 値を格納するには変数 variable を用いる変数は 格納する値の型によって 整数型 文字型 などの型 type をもつ変数を使うには 利用に先立って変数の宣言 declaration をしなければならない 値 変数の値はコンピュータのメモリ上に格納される 具体的にメモリのどの場所に格納されるかは言語処理系が自動的に扱うので プログラマ ( 特に初級者 ) が意識する必要はない

More information

gengo1-11

gengo1-11 関数の再帰定義 自然数 n の階乗 n! を計算する関数を定義してみる 引数は整数 返却値も整数 n! = 1*2*3*... * (n 1)*n である ただし 0! = 1 とする int factorial(int n) int i, tmp=1; if( n>0 ) for(i=1; i

More information

* ライブラリ関数 islower(),toupper() を使ったプログラム 1 /* 2 Program : trupper.c 3 Student-ID : K 4 Author : TOUME, Kouta 5 Comments : Used Library function i

* ライブラリ関数 islower(),toupper() を使ったプログラム 1 /* 2 Program : trupper.c 3 Student-ID : K 4 Author : TOUME, Kouta 5 Comments : Used Library function i 1. ライブラリ関数 islower(), toupper() を使い 下記の trlowup プログラムを書き換えて 新規に trupper プログラムを作成せよ * サンプルプログラム 1 /* 2 Program : trlowup.c 3 Comments : translate lower case characters into upper case ones. 4 */ 5 6 #include

More information