68
Theoretical Science Group 学グループ

Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

  • Upload
    others

  • View
    4

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

Theoretical Science Group

理論科学グループ

Page 2: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

部報 198号

— 新入生歓迎号 —

目 次

新入生自己紹介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

C++ 言語入門 第 1回 . . . . . . . . . . . . . . . . . . . . . . . . . . . .〔わたる〕14

初心者のための 8086講座 . . . . . . . . . . . . . . . . . . . . . . . . . . .〔高野〕34

文字コードの話 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 〔早坂くりす〕43

TSG用語の基礎知識 Ver. 1.0 . . . . . . . . . . . . . . . . . . . . . . . .〔ZERO〕55

Page 3: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

新入生自己紹介

新入生自己紹介

坂本 崇裕

坂東大五郎

丹下 吉雄

西 元

宮崎 大輔

菅原 豊

丸山 勲

時田 忠昭

鶴見 雅弘

馬本 英樹

小林 徹也

保原 麗

黒川 秀樹

長野 誠

岡崎哲也

内仲 俊輔

寺園 泰

TSG 部報 No. 199 1

Page 4: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

新入生自己紹介

¶ ³坂本 崇裕µ ´

・名前 坂本 崇裕

・ハンドルネーム すーゆー  日本語が使えるとき

TYM  日本語が使えないとき

・保有機種 PC-9821Xa13/K12

MT-8617ES

BJC-400J

MC288XL II

PC-9801-118/PC-9821C3-B02

■ 自己紹介など

パソコンは中学 2年から友人に勧められて使い始めました。その時のマシンは PC–

9801DA21)でした。そして、友人達 10人ほどの間で「MyくろフロッP」なるパソコン

サークルを結成し、初心者から上級者までが集まり、自主的に開発したプログラムの公

開や意見交換が行われていました。現在、受験期間ということで休止していたこのサー

クルを「MyくろフロッP・R」としてその活動を再開しようかどうか検討中です。

それとは別に学校のパソコン同好会 (NPCA)(現「電腦科學研究部」)に高校 1年から

入部し、その活動を見てるだけ~(副会長だろが)でした。また、去年から、「INFINITY-

SERVE」(078-435-2263) なる BBSをこのクラブで開局&運営しています。現在では神

戸では有数のあやしげな CGのたまり場となってしまいました。いつまで続くか分から

ない BBSですが、興味のある方はアクセスしてみてください。

そ~ゆ~わけで、どんなわけで~ (^_^;)

現在の私は、あまりパソコンそのものに関する活動はあまりしておらず、パソコンを

使って何かをする (LaTEXでレポートを書く 等など)程度です。つまり、「作る」立場か

ら「使う」立場に変わってしまったわけです。昔は、C/C++, 86ASM, QuickBASIC な

んかを使えていたような気がしますが、今はどこまでできるやら>謎<です。

あっ、そうそう。通信に関しては始めてまだ 1ヶ月も経っていない筋金入りの初心者

です。また、今までMS系の OSに毒されてきたので、ECC の UNIX では戸惑うこと

ばかりです。そこいらあたりのどこぞのところを教えてくださるとうれしいです。理科

1類 19組 (ドイツ語)にいますので、声をかけてください。

ZOB Station BBS zob19155 すーゆー

いぬ。BBS INU00090 すーゆー

INFINITY-SERVE INF00028 すーゆー

ECC g640770 Takahiro SAKAMOTO

1)改造するにはもってこいのマシンです

2 TSG 部報 No. 199

Page 5: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

新入生自己紹介

¶ ³坂東大五郎µ ´

クラス: 1年 SI-20

名前: 坂東大五郎

ハンドル: 別にないですけど…まあ、[b]や [ばんだい]という

ところでしょうか?

ホームページ: http://www.komaba.ecc.u-tokyo.ac.jp/~g640834

パソコン: COMPAQ PRESARIO CDTV と

TOSHIBA DynaBook V386

(いまだに 486DX2 66MHzです。しかも最近買ったばかり)

どうも、坂東といいます。高校の時結構 C (LSIC-86試食版)にはまっていました。何

をしていたかって? 主にゲームなんか作ってみようかなーなんておもってたけど、完成

したのは多分ありませんでしょう。あと、ソフトは少し、実用的そうなものを作れたか

な?ってときもありましたが、おそらく私の DynaBookでしか動かなかったりするかも

知れません。

そういえば、いぬ。BBSにアクセスしたこともあります。ゲストでですが……。

¶ ³丹下 吉雄µ ´

名前 丹下 吉雄

クラス 理 I 4組

保有機 GATEWAY2000 P5-133 プロフェッショナル

(SPEC: Pentium133MHz 16MB-EDO 1GB-HD

256KB-PBSRAM)

出身 三重県四日市市。暁高校卒。

TSG 部報 No. 199 3

Page 6: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

新入生自己紹介

¶ ³西 元µ ´

名前 西 元 (にし はじむ)

所属 理 2 12組 ドイツ語

機種 Macintosh SE, IBM XT/AT 互換機 :最近ぜんぜん使ってないっす

名前が 2文字ですが、純粋な日本人です。2年生です。合気道気錬会というサークル

に入ってます。2年になり、プログラミングをやりたくて、TSGに入ろうとおもったの

であります。プログラミングは、ほぼ素人です。(一応火 5の数理情報一般で、LISP と

か Schemeをかじっています。) そこで、今はいざプログラミングするときにスムーズ

にできるように、タッチタイプの練習に励んでいるのでした。よろしく!

¶ ³宮崎 大輔µ ´

名前: 宮崎 大輔

パソコン通信はやってません

機種 等: 小学校の頃、PCー 6001を使っていた

その後、PCー 9801UV21をかってもらい、また、小学校でも 98をつかって、ロゴラ

イターでプログラムをつくってたその後、大学に入って FMーV DESKー POWER SP

というのを買ってもらうまで 98のベーシックを使ってた

¶ ³菅原 豊µ ´

名前 菅原 豊

使用機種 本体 PC-9821Xa10/C12

ディスプレイ MF-8617E

プリンタ BJ-10V select

拡張ボード WaveMaster

4 TSG 部報 No. 199

Page 7: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

新入生自己紹介

僕がパソコンを始めたのは、中学 2年のころです。はじめて使ったのは、三菱の MUL-

TI16 (知っている人いるかな?) です。これで ASM86を学びました。

その後 PC-9801NS/Eを買い、BASICやアセンブリ言語でプログラミングをしました。

アセンブリ言語では円周率を 131065 桁求めたりしました。NS/EでWindows3.1もや

りました。しかし、スピードが笑っちゃう程遅いのですぐに HDから削除しました。そ

して現在、Xa10 で快適にWindowsをやっているという次第です。高校 3年生の夏休み

に勉強をおろそかにして NS/Eでゲームばかりやっていたところ、あたかも天罰である

かのように落雷があり、それによって NS/Eの動作がおかしくなりました。使用中に突

然リセットされるようになったのです。もちろん、恐ろしくて使えませんでした。現在

は前述したように Xa10を使っています。今年は C言語やインターネットをやりたいと

思っています。インターネットは家でやると有料なので学校でやろうと思います。それ

から、今持っているアセンブラがN88BASICモニタだけなので、まともなやつを自作し

ようと思います。

¶ ³丸山 勲µ ´

名前: 丸山 勲

ハンドルネーム: まる

言語: BASIC、Cくらい

italkで知ったTrrにはまっています。でも、まったく点が伸びません。(190で頭打ち)

目指せ!業界標準!

TSG 部報 No. 199 5

Page 8: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

新入生自己紹介

¶ ³時田 忠昭µ ´

名 前: 時田 忠昭

ハンドルネーム: な し

科 類, クラス: 理科二類 13組

出 身 高 校: 山口県立 下関西高校

保 有 機 種: パソコン / なし

ポケコン / SHARP PC-E650

一 言: パソコン初心者です。

どうぞよろしく。

¶ ³鶴見 雅弘µ ´

名前 鶴見 雅弘

ハンドル名 未定

パソコン なし (買う予定)

言語 BASICをちょっとだけ

コメント よろしくお願いします

6 TSG 部報 No. 199

Page 9: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

新入生自己紹介

¶ ³馬本 英樹µ ´

本名 馬本 英樹

ハンドル ひでき (←経験は薄い…)

科類・組 理科 1類 28組 (フランス語)

所有機種 PC-9801FA2 , FAMILY BASIC , FAMILY BASIC V3 ,

FAMILY COMPUTER, FAMILY COMPUTER DISK

SYSTEM, SUPERFAMICON, GAME BOY,

SEGASATURN

パソコン歴 約 4年 (しかしプログラムは殆んどやってない…)

使用言語 (熟練度順) 日本語 > BASIC > 英語 》 フランス語

ゲーム歴 約 13年。

語るにはここではスペースが足りないので、割愛。

これからの目標 BASIC 以外の言語を最低一つは習得する。

あとブラインドタッチをマスターする。

¶ ³小林 徹也µ ´

Cが習いたくてはいりました。ほかにもサークルに入っているので分科会以外はあま

りこないかもしれませんがよろしく。

TSG 部報 No. 199 7

Page 10: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

新入生自己紹介

¶ ³保原 麗µ ´

氏名 保原 麗

性別 男

学年 1

課類 理科 1類

組 18

生年月日 昭和 52年 10月 19日

年齢 18歳

使用電算機 NEC P9801DX/U2

IBM Aptiva Music Vision(2407-RYD)

出身高校 東京学芸大学附属高校

特技 睡眠不足と南京玉簾

使用言語 母語は日本語

第 1外国語 BASIC

  2    機械語

  3    英語

  4    C++

  5    ドイツ語

  6    Pascal

第 5、第 6外国語については現在勉強中

趣味 秘密

8 TSG 部報 No. 199

Page 11: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

新入生自己紹介

¶ ³黒川 秀樹µ ´

名前 黒川秀樹 [くろかわ ひでき] (湯川秀樹と一字違い)

生年月日 1977年 9月 23日 (秋分の日)

所属先 東京大学 教養学部 理科一類 4組 E 一年

持 っているパソコンと周辺機器

PC9801DA

ハードディスク 240Mb

3倍速 CPUアクセラレイター

モデム 28800bps [2月 23日 (入試一日目!)に購入]

(ただしすべて今年大学受験をする弟に譲ってきたので、

新しく買う予定)

自己紹介と言っても特に何も浮かばないので、僕とパソコンのつき合いについて書こ

うと思います。まず僕が初めてパソコンに触れたのは小学 4年の時、うちで売られてい

たMSXで遊んだ時だと思います。そのMSXと言うのが、ファミコンのようなカセット

を差してやるか、テープレコーダーに記憶したやつをやるかと言うような代物で、子ど

も心にパソコンとはファミコンよりも下だと思ったような記憶があります。

その次はしばらく飛んで中学 1年の時になります。友人 (自転車で行きが 30分、帰り

が 5分の山奥に家がある) がパソコンで「続・ダンジョンマスター」をやっていたので

す。フォンという低く不気味な音 (今思えばパソコンの起動音)とともに現れる画面、動

きながら迫り来る敵、難解な (ひねくれた)謎、そのすべてに魅せられて、「パソコンを

買いたい。パソコンを買ってゲームがしたい。」と言う強烈な願望が生まれました。

さて、そこからが大変です。いくらパソコンが欲しいと親にねだっても 30万以上もす

るものをそうやすやすと買ってくれるはずもありません。そこでゲームをしたいと言う

本当の理由は隠し勉強に使うからと言いくるめて、テストで一番をとったらと言う比較

的簡単な条件にまで持っていき、まるでだますようにして (実際だましている) 買っても

らいました。しかし勉強に使うと言っている手前、親が来ると BASICをつかって、線

を引いたり、円を動かしたりして誤魔化していました。(ちなみに最初に手に入れたゲー

ムは「アルシャーク」、買ったのは「同級生」)

その後ゲームをしているのが誤魔化せなくなると、ひらきなおってゲームばかりする

ようになり、中学のうちはゲーム (主にエロゲー)づけの毎日でした。

高校にはいると、全寮制と言うこともありゲームから遠ざかっていたのですが、「同級

生 2」が発売された時には、寮にパソコンを持ち込みロッカーの中に隠し、朝の 3時に

起きてやると言う荒技をしていました。(いやー、あのころは若かった)

それでも高 3の 2学期になると、CONFIG.SYSいぢりにはまり、3学期になるとそろ

そろプログラムが組めないとヤバイかなと思うようになり、今に至るわけです。

TSG 部報 No. 199 9

Page 12: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

新入生自己紹介

というわけで、僕は現在プログラムのことはほとんど分かりません。ただし、ただ今

C++を勉強中ですので、これからの成長を楽しみにしていて下さい。

¶ ³長野 誠µ ´

事故衝壊!

名前 長野 誠

クラス 理科一類 1年 11組 (ドイ語)

出身校 神奈川県立多摩高校

機種 PC-9801FA (買い替え間近か?!の噂)

BJ-10v

プレイステーション;鉄拳やったことありません。

スーファミ

言語 昔 BASICをやったような記憶がある (かなり使えた)

今再びプログラミングに取り組む時が来たのだ・・・。

パソコン歴 8年 (MSXは良かった。)

たしなみ マージャン

悩み事 果たして 98がいいのか、それとも DOS/Vがいいのか・・・。

高校時代ずっとパソコンから遠ざかっていましたが、ようやくやる気も戻ってきたの

で、飽きないうちにある程度のプログラムが組めるぐらいの所まで行きたいと思ってい

ます。いろいろと教えて下さいね。でもまず買い替えが先だ。98かデスクパワーかアプ

ティバか・・・。

終り。(6_6"!

¶ ³岡崎哲也µ ´

氏名 岡崎哲也

科類 文科 2類 12組

持っている機種 スーファミ、メガドラ、サターンなど

(ゲームばっかりですいません)

10 TSG 部報 No. 199

Page 13: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

新入生自己紹介

ゲーム歴は長いのですが、パソコンに関してはまったくの初心者なのでアドバイスを

よろしくお願いします。もちろん自宅にもコンピューターと呼べる様な物はなく、今度

行なわれる秋葉原ツアーなるものに参加して勉強していきたいと思います。

実はパソコンに関する思い出は意外と古く、小学生のころ授業で使ったアップルが最

初のものだったりします。ちなみに機種については、その後中学の時導入されたものが

アップル II Gsと呼ばれていた事ぐらいしか分かりません。

一方のゲームは覚えている限り、という感じで幼稚園の頃にはもう 100円玉を持って

ゲーセンに走っていました。今では対戦格闘やシミュレーションが好きで、ZERO2など

はそこそこの線いってると思うのですが。他ではタクティクス オウガやファイヤーエム

ブレムあたりでしょうか。TSGにいる間はゲーマーとしてではなく、TSGerとして活動

していきたいと思っているので、安心してください (この文章が矛盾したものでないと

いいな。)

¶ ³内仲 俊輔µ ´

名前: 内仲 俊輔

所属: 文科 2類 4組 (中国語)

出身校: 開成 血液型:O

趣味: えーと、趣味は何といってもギャンブル一般。中でも、麻雀と競馬をこよなく

愛してます。ちなみに、ホースメンという競馬サークルにも所属してます。興味のある 1

年の人は、(もちろん 2年の方も)顔を出してみて下さい。さて、コンピュータ関係では、

ゲーム以外のことは全くわかりません。はっきりいって、このメールを書くのにも手間

取ってるくらいです。1から学ぼうと思っているので、みなさんよろしくお願いします。

いっぽう、ゲームのほうは、長年RPGばっかりやってます。ハードはファミコンとスー

ファミしかありませんが、馬で儲けたら、64とプレステをかうよていです。えー、すき

なメーカーはチュンソフトで、サウンドノベルも好きですが、風来のシレンがBESTだ

と思います。でも本当は昔から任天堂一筋!任天堂万歳!!! (おしまい)

TSG 部報 No. 199 11

Page 14: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

新入生自己紹介

¶ ³寺園 泰µ ´

名前 寺園 泰 (てらぞの やすし)

所属 理科一類 2年 13組

自宅の機械 AT互換,AMD5x86/160MHz,16MB-DRAM,340MB-HDD,

その他オプション等

環境はよく変わる。取り敢えず HDD増設して PC UNIXでも

入れたい。

その他 は、コンパの時にでも。

12 TSG 部報 No. 199

Page 15: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

新入生自己紹介

おことわり: pdf による一般公開に当たり、html 版と同様に個人情報を削除しました。

そのため、新入生自己紹介は冊子版とページ割が異なっております。御了承下さい。

追記: 2009年 4月、著者の要請により 1名分の紹介を削除しました。

1ページ減ってしまったから埋め種です :>

TSG 部報 No. 199 13

Page 16: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

C++ 言語入門 第1回C / C++ 言語分科会

わたる

¶ ³1 プログラミング言語とは何かµ ´

よく知られているように、コンピュータは 0と 1しかわかりません。コンピュータに

何かを認識させるためには、0と 1の組み合わせによって表現しなければならないので

す。0と 1の組み合わせがあれば 2進数が使えますね。この 2進数の値をさらに様々な

情報に対応させて、コンピュータは物事を把握します。例えば A と言う文字は 1000001

(10進数で 65)に対応付けられています。

また、コンピュータに何か仕事をさせたいときは、その手順を教えてやらねばなりま

せん。この手順というのがプログラムなのです。その内容もまた 0と 1の組み合わせで

表現します。Intel社製の有名な CPU『Pentium』の場合を例にとりましょう。『ax』と

いう名前の変数(正しくはレジスタ)に 0を代入せよと命令したい場合、10進数で 184、

0、0に相当する 2進数3個で表現します。2進数によるこのような表現をマシン語(ま

たは機械語)と言います。マシン語がとてつもなくめんどうなことは、これ以上説明す

るまでもなくわかりますね。1)

そこで、まずはもっと人間にわかりやすい言葉でコンピュータに対する命令を記述し、

それをマシン語に翻訳するという2段階の方法が考案されました。人間にわかりやすい

言葉というのがプログラミング言語なのです。翻訳作業はあらかじめ用意されたマシン

語のプログラムにより、コンピュータがします。だから人間の手間が増えることはあり

ません。

¶ ³2 どうして C / C++ 言語を使うのかµ ´

プログラミング言語にはたくさんの種類があります。BASIC、Fortran、Cobol、Prolog、

Lisp、Pascal、Smalltalk、Java、そして C、C++ などです。これらにはそれぞれ一長

1)CPUとはまさにこのマシン語を理解する ICのことです。

14 TSG 部報 No. 199

Page 17: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

一短があるのですが、文句無く最初に学ぶべき言語は C であり、続けて C++ も勉強す

るべきなのです。2) C / C++ の魅力的な特徴をいくらか挙げておきます。

• C / C++ は学びやすい。

• C / C++ を知っている人がたくさんいる。

• C / C++ を扱った書籍は山ほどある。

• C / C++ で書いたプログラムはコンピュータが速く実行できる。

• C / C++ のプログラムは簡潔である。

• C / C++ のコンパイラ (マシン語に翻訳するプログラム) は無料で手にはいる。

• C / C++ で作れないプログラムはない。

¶ ³3 はじめにµ ´

この分科会は C と C++ をマスターすることが目標ではありません。あくまで入門講

座です。説明の容易さと理解のしやすさにより、 C++ を C よりも先に勉強することに

します。それから、市販の解説書のように、C や C++ の機能を項目別に系統立てて解

説したりはしません。文法や仕組みの説明は、例題プログラムが理解できる程度で小出

しにします。途中で欲求不満になってしまった人は、生協などで解説書を買って読んで

下さい。

この分科会では情報処理棟の UNIXの使用を前提とします。他の環境だと以下の内容

は必ずしもそのまま通用しません。MS-DOSやWindowsでのことについて知りたい人

は直接尋ねて下さい。またMuleや ls、ファイルやディレクトリの使い方や意味はここ

には書きません。わからない場合は質問するか、情報処理の教科書などで調べて下さい。

その他、どんな些細なことでも気軽に尋ねて下さい。「この文字の打ち込み方がわから

ない」と言うようなことでも結構です。『わからないことはすぐに質問する』が上達への

早道なのです。

2)某ゲイツ氏は BASIC が初心者には最適だと主張していますが、彼がBASICを作ったからそう言っているだけでしょう。

TSG 部報 No. 199 15

Page 18: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

¶ ³4 もっとも簡単なプログラムµ ´

とにかく手始めに、画面へ hello, world と表示するプログラムを作ってみましょう。

詳しい解説は後回しにします。Muleなどのエディタで以下の内容をそっくり写したファ

イルを作り、hello.cc というファイルネームで保存して下さい。#include <iostream.h>main(){

cout << "hello, world";cout << endl;

}

hello.cc の内容は後で解説します。ファイルを作ったら、ktermに以下のように入力

して下さい。g540879@xss01> gcc hello.cc -lg++(ここでリターンキーを押す。)

g540879@xss01> の部分は入力しないで下さい。もうあらかじめ画面にあるはずです。

数字の部分が少し違うかもしれませんが、気にすることはありません。(この部分はあな

たの ID と使っているコンピュータの名前なので、人や座っている席によって違うので

す。)リターンキーを押して、少しだけ時間がたってから再び g540879@xss01> と画面

に現れたら成功です。もし error など他の何かが表示されたら、近くにいる TSGの人

に言って下さい。たぶん hello.cc の中に写し間違いがあったのでしょう。

次に ls でディレクトリの中身を確認します。g540879@xss01> ls

a.out hello.cc

a.out という新しいファイルが勝手に作られているのに気が付きましたか。a.out は

hello.cc をもとに作られたマシン語のファイルです。実行可能ファイル executable

fileと言います。マシン語なのでコンピュータは理解し実行することができます。やら

せてみましょう。g540879@xss01> a.out

hello, world

hello, world と表示させることができました。

¶ ³5 hello.ccの解説µ ´

hello, world を表示するまでの過程でしたことを、順を追って説明します。

まず hello.cc というファイルを作りました。.cc の部分が、このファイルが C++ 言

語のプログラムであることを表しています。このようなファイルをふつうソースコード

16 TSG 部報 No. 199

Page 19: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

source code と言います。そして gcc はソースコードをマシン語に翻訳してくれるプ

ログラムです。翻訳作業のことをコンパイルと言います。gcc は GNU C & C++

Compiler の略で、GNU というある思想を持った人々が作っており、無料で使うこと

ができます。GNU がどんな内容の思想なのかは、別の機会に説明しましょう。-lg++

は C++ を使うことを表しています。単なる C のときは不要です。

では次に hello.cc の中身を解説します。説明しやすいように各行に番号をつけてみ

ました。1: #include <iostream.h>2: main()3: {4: cout << "hello, world";5: cout << endl;

6: }

一般に C++ のソースコードは、関数の定義 function definition と実行すべき処理

の順序を記した文 statement からなっています。すべての C++ のプログラムは main

という名前の関数定義を含んでいなければなりません。コンピュータがある C++ のプ

ログラムを実行しようとするとき、まず関数 main に書かれた計算を処理するからです。

数学では、関数とは入力と出力を一意的に結びつけるものを意味しますが、 C++ の

関数は違います。入力や出力は無い場合もありますし、なんらかの副作用があったりも

するのです。そのため、多くのプログラミング言語では C++ の関数に相当するものを

手続き procedure と呼んでいます。しかし C++ では伝統的に関数と言われています

ので、皆さんもそのように呼んで下さい。

さて、関数 main は次の形式で定義します。main(){

文;

文;...

}

main の後のカッコ () は、main が関数であることを示しています。それに続いて関

数の具体的内容を中カッコ { } で囲んで記述します。実際に実行する文はセミコロン ;

で区切りって下さい。

hello.cc の場合の main() の定義を見てみましょう。4: cout << "hello, world";

cout は 標準出力 に繋がっている ストリーム stream です。標準出力とはようする

に画面のことで、後々詳しく説明します。ストリームとは、簡単に言うと、出力演算子

output operator << で様々なものを流し込むことができるものです。流し込んだ先が

ファイルになっているストリームもあります。hello.cc の場合は "hello, world" を

流し込んでいますね。C++ では、一続きになっている複数の文字を扱うときはダブル

コーテーション " で囲むことになっています。これを文字列 string と言います。

ストリームには以下のようにして、連続的にものを流し込むことができます。

TSG 部報 No. 199 17

Page 20: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

1: #include <iostream.h>2: main()3: {4: cout << "hello, world" << endl;

5: }

では endl は何なのでしょうか。ちょっと実験して見ればすぐわかります。以下のよう

にソースを変更してみて下さい。1: #include <iostream.h>2: main()3: {4: cout << "hello, world"5: << "Hello, TSGers!";

6: }

4行目にセミコロン ; が無いことに注意して下さい。練習ですからこのソースコード

もコンパイルして実行してみましょう。やってみるとわかりますが、無様にも 2つの文

字列がくっついて表示されてしまいます。g540879@xss01> a.out

hello, worldHello, TSGers!

以下のように修正すればきれいに表示されます。1: #include <iostream.h>2: main()3: {4: cout << "hello, world" << endl5: << "Hello, TSGers!" << endl;

6: }

4行目で hello, world と Hello, TSGers! の間に endl を入れました。g540879@xss01> a.out

hello, worldHello, TSGers!

endl は行の終わりを意味し、改行する機能があるのです。

ところで 1行目の解説がまだでした。これです。1: #include <iostream.h>

# で始まる文は、実は文 statement ではありません。プリプロセッサ命令です。これ

の解説はやっかいなのでずっと後回しにしますが、#include <iostream.h> の意味は

簡単です。iostream.h というファイルを読み込みなさいという意味です。iostream.h

は /usr/include というディレクトリにあります。

実は、iostream.h には cout の定義が書かれています。この定義があるから main()

の中で cout が使えるのです。cout を使ったプログラムを作るには必ずこの行が必要で

す。気になる人はMuleに iostream.h を表示させてみて下さい。しかし cout だけで

なく、他の定義がたくさん書かれていますからやめておいたほうが無難でしょう。

以上で hello.cc の解説はお終いです。

18 TSG 部報 No. 199

Page 21: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

5.1 ちょっと道草

せっかく作った実行可能ファイルがいつも a.out という名前にされては不便ですね。

UNIXを少し知っている人なら mv で a.out の名前を変更する手を思いつくかもしれま

せんが、もっとよい方法があります。g540879@xss01> gcc -o hello hello.cc -lg++

とすれば a.out でなく hello というファイルネームになります。

5.2 ちょっと道草

ソースコードの見やすさについてです。C++ は空白や改行を自由に取ることができ

ます。例えば以下のソースコードからは全く同じ実行可能ファイルが生成されます。1: #include <iostream.h>2: main()3: {4: cout << "hello, world" << endl;5: cout << "Hello, TSGers!" << endl;

6: }

1: #include <iostream.h>2: main(){cout<<"hello, world"<<endl<<"Hello, TSGers!"<<endl;}

1: #include <iostream.h>2: main(){3: cout << "hello, world" <<endl;4:5: cout<<"Hello, TSGers!" <<endl;

6: }

正式なレイアウトは存在しませんが、なるべくわかりやすいスタイルにしましょう。

¶ ³6 変数とはµ ´

C++ における変数 variable とは、コンピュータのメモリ上の小さな領域に名前を付

けたものです。

メモリとは、ONとOFFの2通りの状態を取れる電気的なスイッチの集まりで、コン

ピュータはここに様々な情報を蓄えることができます。このスイッチ一つのことを 1ビッ

トと言い、1ビットが 8個集まったものを 1バイトと呼びます。最近のコンピュータは

すべてメモリを 1バイト単位で管理しています。ゲームでよく遊ぶ人は、255や 65535

という数字を見かけたことがあるはずです。これは 1バイトのメモリが 2の 8乗で 256

通り、つまり 0から 255の数字を記憶できることに由来しているのです。2バイトなら

ば 2の 16乗で 65536通り、0から 65535までの数字になりますね。

TSG 部報 No. 199 19

Page 22: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

情報処理棟で使われているコンピュータはメモリを 67,108,864バイト搭載しています。

また最近はパソコンでも 16,777,216バイト程度のメモリはあります。これほど膨大な数

になると、「xxxx番目のメモリにあの情報を記憶して…」というやり方では不便すぎま

すね。そこで、メモリの小領域に名前を付けて使いやすくするわけです。

変数にはデータ型 data typeがあり、それによってメモリ上の小領域の大きさと、記

憶されている情報の解釈の仕方が決まります。しばらくは最も基本的なデータ型である

int型に話を絞って進めましょう。

int型の変数は整数を記憶することができ、駒場の情報処理棟の環境では 4バイトの

大きさがあります。つまり正負の符号を表す 1ビットと絶対値を表す 31ビットからな

り、−2, 147, 483, 468 から +2, 147, 483, 647 までの値を取ることができます。

¶ ³7 変数を宣言するµ ´

C++ で変数を使いたいときは、まずそのことを宣言 declareしなければなりません。

これによってコンパイラが変数用のメモリを確保し、そのデータ型を知ることができま

す。変数の宣言は『データ型 変数の名前;』の書式で行います。宣言する場所は、その

変数が使われる前の部分ならどこでも可能です。main(){int x;int y;

int z;

変数の名前はアルファベットと数字、アンダーバー underbar _ で構成します。また、

同じ型の変数宣言はコンマで区切ってまとめることができます。main(){int width, height, number_of_members;...

変数に値を代入するには代入演算子 = を使います。次のソースコードを見て下さい。#include <iostream.h>main(){int width, height, area;

width = 3;height = 5;

area = width * height;

cout << "The area is " << area << endl;

}

20 TSG 部報 No. 199

Page 23: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

アステリスク asterisk * は掛け算の意味です。実行すると The area is 15 と表示

されます。

¶ ³8 変数の初期化µ ´

まず以下のソースを見て下さい。#include <iostream.h>main(){int width, height, area;

area = width * height;

cout << "The area is " << area << endl;

}

変数 widthと heightに値を全く代入していません。このような変数の値は不定です。

0になっていることがよくありますが、そうなると保証されているわけではありません。

不定な値から算出された areaも当然不定となります。結果として画面に何が表示され

るかもわからなくなってしまいます。このようなプログラムは欠陥品です。

しかし、変数に値を代入し忘れたためバグ(プログラムの欠陥。虫食いの意味。)が発

生してしまうことはよくあるのです。このような事態を回避するため、変数の宣言と同

時に値を代入してしまうことができます。#include <iostream.h>main(){int width = 3, height = 5;

int area = width * height;

cout << "The area is " << area << endl;

}

これを変数の初期化と言います。

¶ ³9 いろいろなデータ型µ ´

int型以外にも次に示すようなデータ型があります。

TSG 部報 No. 199 21

Page 24: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

データ型 バイト数 扱える数値

char 1 ごく小さい整数と、文字や記号 (−128 ∼ +127)

short 2 小さい整数 (−32, 768 ∼ +32, 767)

long 4 大きな整数 (−2, 147, 483, 648 ∼ +2, 147, 483, 647)

int — そのコンピュータが最も得意とする大きさの整数

情報処理棟ではlongと同じ

float 4 精度の低い実数 (3.4 × 10−38 ∼ 3.4 × 1038)

double 8 精度の高い実数 (1.7 × 10−308 ∼ 3.4 × 1.7308)

long double 10 精度の非常に高い実数 (1.1 × 10−4932 ∼ 1.1 × 104932)

一般に、実数の計算は整数のそれより時間がかかります。不必要に実数型を使わない

ようにしましょう。変数宣言の仕方はどれも int型と同じです。#include <iostream.h>main(){float pi = 3.14, r = 1.4;

float area = pi * r * r;

cout << "The area is " << area << endl;

}

9.1 ちょっと道草

各データ型が何バイトのメモリを要するのかは、sizeof 演算子でわかります。以下の

ソースをコンパイルして見て下さい。#include <iostream.h>main(){cout << "Data Type bytes"<< endl

<< "char " << sizeof(char) << endl<< "short " << sizeof(short) << endl<< "long " << sizeof(long) << endl

<< "int " << sizeof(int) << endl<< "float " << sizeof(float) << endl<< "double " << sizeof(double) << endl<< "long double " << sizeof(long double) << endl;

}

¶ ³10 計算式を書くµ ´

加算、減算、乗算、除算の演算子はそれぞれ +、-、*、/ です。

22 TSG 部報 No. 199

Page 25: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

これらのうち除算には少々気を付ける必要があります。次のプログラムを実行してみ

ましょう。#include <iostream.h>main(){cout << "5 / 3 = " << 5 / 3 << endl;

}

結果は 1と表示されます。整数同士の除算では小数点以下の部分は切り捨てられ、商

しか得られません。モジュロ演算子 modulus operator % によって剰余を知ることが

できます。実数型同士ならば正しい答えが得られます。#include <iostream.h>main(){cout << "5 / 3 = " << 5 / 3 << " ... " << 5 % 3 << endl;

cout << "5 / 3 = " << 5.0 / 3.0 << endl;

}

実行結果5 / 3 = 1 ... 25 / 3 = 1.66667

似たような問題に変数の型変換があります。次のソースを見て下さい。#include <iostream.h>1: main()2: {3: short s;4: float f;5: f = 1.9;6: s = f;7: cout << s << endl;8: f = 100000.0;9: s = f;10: cout << s << endl;

11: }

実行結果1-31072

6行目や 9行目のように整数型変数に対して実数型変数を代入すると、自動的に型変

換が行われて小数点以下が切り捨てられた値が代入されます。しかし 8行目を見て下さ

い。f の値が short 型の最大値 +32767 を越えていますね。この様な場合、s にはでた

らめな値が代入されてしまうのです。

10.1 ちょっと道草

C++ には、数学にはない演算記号や代入記号があります。

TSG 部報 No. 199 23

Page 26: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

a++ 変数 aの値を 1増やす。

a-- 変数 aの値を 1減らす。

a += b 変数 aに変数 bの値を足す。

a = b = c 変数 aと変数 bに変数 cの値を代入する。

a = (b = c) 同上。

a = b++ 変数 aに変数 bの値を代入してから、bの値を 1増やす。

a = ++b bの値を 1増やしてから、変数 aに変数 bの値を代入する。

¶ ³11 関数を定義するµ ´

平面上の 2点の距離を求めるプログラムを作ってみましょう。例として点 (1, 2) と点

(3, 4) を選ぶとします。C++ で平方根を求めるには、math.h の中であらかじめ用意さ

れている関数 sqrt() を使います。math.h の中にはいろいろな数学関数の定義が書かれ

ています。#include <iostream.h>#include <math.h>main(){double distance = sqrt( (1 - 3)*(1 - 3) + (2 - 4)*(2 - 4) );

cout << distance;

}

異なるたくさんの 2点間の距離を求めたいのであれば、距離を求める関数 distance()

を作った方がよいでしょう。#include <iostream.h>#include <math.h>main(){cout << distance(1, 2, 3, 4);

cout << distance(5.1, 6.2, 7.3, 8.4);

}

C++ の関数は複数の引数を取ることができ、コンマで区切ります。このプログラム

は関数 distance() がまだ定義されていないので動きません。次のように定義してみま

しょう。1:double distance(double x1, double y1, double x2, double y2)

2:{3: double result;

4: result = sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2));

5: return result;

6:}

24 TSG 部報 No. 199

Page 27: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

1行目 double distance() の部分は、この関数の結果の値、つまり戻り値が double

型であることを決めています。5行目の return result でこの関数の戻り値を定めてい

ます。この場合、当然 result は double 型の変数でなければなりません。

1行目 double distance() のカッコ () の中は引数のデータ型と名前を書くところ

で、double x1, double y1, double x2, double y2 となっています。関数に渡され

た引数はここに記された変数に代入されて、関数内部のプログラムは自由に扱えます。

変数の宣言と似ていますが、double x1,y1,x2,y2 の様に省略して書くことはできませ

ん。この関数定義を組み込んだソースを見てみましょう。#include <iostream.h>#include <math.h>

double distance(double x1, double y1, double x2, double y2)

{double result;

result = sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2));

return result;

}

main(){cout << distance(1, 2, 3, 4);

cout << distance(5.1, 6.2, 7.3, 8.4);

}

コンパイラはソースを前の方から解釈していきますから、関数 distance() の定義は、

この関数が実際に使われるところより前に書く必要があります。

11.1 ちょっと道草

上の例で、関数 distance() を作ったことにどのような意義があったのか考えてみま

しょう。

1つ目の意義は、プログラムのデバック debug(欠陥を修正する作業のこと)が容易にな

ったことです。もし仮に、距離を計算する公式を間違えていたとします。関数 distance()

を使ってあれば、定義の部分だけを修正すれば大丈夫ですね。しかし distance()を使っ

ていなければ、ソースの距離を計算している部分をすべて直さなければなりません。状

況によっては大変手間取る作業になるでしょう。修正を忘れる箇所が発生するかもしれ

ません。

2つ目は、ソースが再利用しやすくなったことです。今後、距離の計算を必要とする

プログラムを作る必要があった場合は、関数 distance() の定義の行をコピーすればよ

いのです。

3つ目は、ソースが読みやすくなり、同時に書きやすくなったことです。distance()

のおかげで main() のおおまかな処理の流れが把握しやすくなりました。また、関数

distance() の定義の部分は誰か別の人に作ってもらいえば、分担作業にできます。プ

ログラマーはより高度な作業に専念できるようになったのです。

TSG 部報 No. 199 25

Page 28: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

関数を定義することにはたくさんの得があることがわかりましたか。関数の定義のよ

うに、ソースの中で繰り返される特定の作業をひとつにまとめあげることを手続き抽象

と言います。その作業の詳細な内容を隠蔽し、抽象化しているわけです。

¶ ³12 キーボードからの入力µ ´

cin は標準入力(後述)に繋がったストリームです。入力演算子 >> を用いれば、キー

ボードにタイプされるものを変数に代入することができます。#include <iostream.h>main(){

cout << "直方体の寸法を整数で入力して下さい。" << endl;int width, length, height;

cin >> width >> length >> height;

cout << "体積は " << width * length * height << end;

}

入力するときは各整数を空白や改行で区切ることができます。なお cout と同様、cin

を使いたいときも#include <iostream.h> が必要です。

ところで標準出力や標準入力の意味をまだ説明していませんでした。これらは C++

の用語と言うよりも UNIXやMS-DOSの言葉なのです。この 2つは通常は画面とキー

ボードのことなのですが、次のようにしてプログラムの実行時にそれらを変えることが

できます。xss01> hello >output

この場合 output というファイルが作られて、そこに hello, worldと書き込まれま

す。標準出力が output というファイルになったのです。<input などとして、ファイ

ルを標準入力にすることもできます。このような標準入出力の変更をリダイレクション

redirection と言います。

12.1 ちょっと道草

C++ のソースには 2つの方法によってコメントを含めることができます。1つめは 2

つのスラッシュ // によるもので、その記号の直後から行の終わりまでの間に自由な注

釈を書くことができます。2つめの方法では、コメントにしたい部分を /* と */ で囲み

ます。#include <iostream.h>//この行は無視されます。main(){

26 TSG 部報 No. 199

Page 29: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

/*

この辺も全部、コメントになります。*/

//変数の宣言double pi = 3.14159,

r = 1.41;

//円周の計算cout << 2 * pi * r << endl;

/* 面積の計算 */cout << pi * r * r << endl;

/*

* こんなのや*//*---------------------

こんなのもあります---------------------*/

/************************

* いろいろ工夫しましょう*/

}

¶ ³13 変数の有効範囲µ ´

入力された 2点間の距離を求めるプログラムを作ってみましょう。1: #include <iostream.h>2: #include <math.h>3:4: double distance(double x1, double y1, double x2, double y2)

5: {6: double result;

7: result = sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2));

8: return result;

9: }10:11: main()12: {13: double x1,y1, x2,y2;

14: cout << "距離を求めたい 2点の座標を入力して下さい。" << endl;

15: cout << "第 1点の x座標は?";16: cin >> x1;

17: cout << "第 1点の y座標は?";

18: cin >> y1;

19: cout << "第 2点の x座標は?";20: cin >> x2;

21: cout << "第 2点の y座標は?";

22: cin >> y2;

TSG 部報 No. 199 27

Page 30: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

23:24: cout << "距離は" << distance(x1,y1, x2,y2) << endl;

25: cout << "2点の座標は (" << x1 << "," << y1 << ")と ("

26 << x2 << "," << y2 << ")" << endl;

27: }

distance() を呼び出した後で、2点の座標を表示していることに注意して下さい。で

はもし、distance() の中、7行目と 8行目の間にx1 = 0; y1 = 0; x2 = 0; y2 = 0;

という行を追加したらどうなるのでしょう。座標の値は全て 0と表示されてしまうの

でしょうか。結論から言うと、そんなことにはなりません。

ある関数が実行されるとき、その引数は新しくメモリを確保して作られた変数にコピー

され、使用されます。つまり関数 distance() の中の変数 x1,y1,x2,y2 は main() の

中のものとは全く別物なのです。それらは名前こそ同じですが、異なる場所にあるメモ

リを使用していて、他方の値が変更されても残りの一方は影響を受けません。

関数の内側で宣言された変数は、その関数の中でのみ使えます。つまり変数には 有効

範囲 scope があるということです。この様な変数を 局所変数 local variable と言い

ます。自動変数 automatic variable と言う呼び方もあります。有効範囲さえ異なれば

同じ名前の変数を何個でも作ることができます。

関数の外側で宣言された変数は、プログラム中のどこでも、あらゆる関数の中で使え

ます。この様な変数を 大域変数 global variable と言います。例として distance() の

変数 result を大域変数に変えてみたソースを示しましょう。なお、この変更は手続き

抽象の精神に反しており、ほめられるものではありません。1: #include <iostream.h>2: #include <math.h>3:4: double result;

5: void distance(double x1, double y1, double x2, double y2)

6: {7: result = sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2));

8: return;

9: }10:11: main()12: {13: double x1,y1, x2,y2;

14: cout << "距離を求めたい 2点の座標を入力して下さい。" << endl;

15: cout << "第 1点の x座標は?";16: cin >> x1;

17: cout << "第 1点の y座標は?";

18: cin >> y1;

19: cout << "第 2点の x座標は?";20: cin >> x2;

21: cout << "第 2点の y座標は?";

22: cin >> y2;

23: distance(x1,y1, x2,y2);

24: cout << "距離は" << result << endl;

28 TSG 部報 No. 199

Page 31: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

25: cout << "2点の座標は (" << x1 << "," << y1 << ")と ("

26 << x2 << "," << y2 << ")" << endl;

27: }

4行目の変数 result の宣言はどの関数定義の内側でもありません。ですから大域変

数となり、7行目や 24行目のように自由な場所で使うことができます。

ところで distance() は戻り値が必要なくなってしまいました。この様な場合は関数

のデータ型を void と書きます。

¶ ³14 変数の存在時間µ ´

変数の持つ性質には、有効範囲の他にもう一つ 存在時間 extent という概念がありま

す。次はこれを説明しましょう。

例えばプログラムの中で distance() が何回実行されたか数えたいとして、以下のよ

うに関数定義を変更したとしましょう。1: double distance(double x1, double y1, double x2, double y2)

2: {3: int counter = 0;4: counter++;

5: cout << "distance() called " << counter << "time(s)" << endl;6:7: double result = sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2));

8: return result;

9: }

しかしこの定義では毎回 distance() called 1 time(s) と表示されてしまいます。

C++ はコンピュータのメモリを節約するために、変数に使うメモリを必要なときだけ

確保するからです。

distance() の内部で起こることを順を追って説明しましょう。まず distance() が

他の関数から呼び出されて初めて、変数 counter のためのメモリは確保されます。この

時 counter は 3行目の宣言に従って値 0に初期化されます。4行目によって counter

は値が 1増え、5行目で 1 と表示されます。続く距離の計算の部分は省略します。8行

目の return のところで、変数 counter と result のメモリは解放されてしまいます。

つまり変数 counter はコンピュータの上から消滅してしまうのです。こうすることに

よって counter が使っていたメモリを他の関数の変数が再利用できるからです。再び

distance() が実行されるときは counter のメモリは新しく確保されて、値 0が代入さ

れてしまい、またも 1と表示されることになります。

counter のようにメモリの確保・解放・再確保が繰り返される変数は、動的存在時間

dynamic extent を持つと言います。これに対して静的存在時間 static extent を持

TSG 部報 No. 199 29

Page 32: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

つ変数があります。プログラムの実行全体を通して、その変数のメモリは一度だけ確保

され、プログラムが終了するまでメモリは解放されることはありません。例えば大域変

数はすべて静的存在です。

しかし counter をもし大域変数にすると、counter の値を distance() 以外の関数

からも変更できるようになってしまいます。これは手続き抽象の精神に反します。そこ

で C++ には局所変数に静的存在時間を持たせる手段として、変数宣言のときに static

を付ける方法があります。1: double distance(double x1, double y1, double x2, double y2)

2: {3: static int counter = 0;4: counter++;

5: cout << "distance() called " << counter << "time(s)" << endl;6:7: double result = sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2));

8: return result;

9: }

これで distance() の実行回数が正しくカウントされるようになりました。

¶ ³15 条件分岐を書くµ ´

プログラムは実行時の状況によってその処理を変えることができます。C++ では、処

理を変える条件の記述に ブール式Boolean expression を使います。ブール式とは 真

true か 偽 false のどちらかの値を持つ式のことです。便宜上の理由から、偽を表す値

には整数の 0が、真を表す値には 0以外の整数が対応しています。

実際に条件分岐をするには if 文を使います。if( 条件式 ){

真の時の処理}else{

偽の時の処理}

分岐後の処理が文一つで表せる場合は {} で囲む必要はありません。また、else{} 以

下は省略できます。具体的な例を見てみましょう。#include <iostream.h>main(){int temperature;

cout << "気温を入力して下さい。";cin >> temperature;

if(temperature > 25) cout << "あついー" << endl;

else if(temperature < 10) cout << "さむいー" << endl;

30 TSG 部報 No. 199

Page 33: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

else cout << "ふつう" << end;

}

このプログラムは、入力された気温が 25℃以上ならば「あついー」、10℃以下なら

「さむいー」、その間ならば「ふつう」と表示します。else の後に if を組み合わせて複

雑な分岐をすることができるのです。ブール式に使うことのできる、2個の数の間の関

係を表す記号をまとめておきましょう。

a == b aと bは等しい(代入演算子 = と間違えないように!)

a != b aと bは等しくない

a > b aは bより大きい

a < b aは bより小さい

a >= b aは b以上

a <= b aは b以下

== を = と間違えるミスは、初心者のみならず熟練したプログラマでもよくやります。

例えば次のような文を書いたとしましょう。

if(temperature = 100) cout << "うそ!" << endl;

このソースは C++の文法的にはまったく正しいのでコンパイラはエラーを出しません。

temperature = 100 という文自体が 100 という値を持ちます。つまり (temperature

= 100) == 100 ということです。(x = y = 0 という文は x と y に 0を代入する意味

であることを思い出して下さい。)0以外の整数はブール式の真なので、temperature =

100 は常に成立する条件式と解釈されてしまうのです。

15.1 ちょっと道草

C++ ではブール式の真偽値を 0以外の整数と 0で表すと言うことは、前にも書きま

した。この性質を利用してこんなふうにプログラムを作れます。#include <iostream.h>main(){int number;

cout << "0以外の整数を入力して下さい。";cin >> number;

if(number) cout << "どうも。" << endl;

else cout << "0以外だってば。" << end;

}

if(number) の様な手法はよく使いますので覚えておきましょう。

TSG 部報 No. 199 31

Page 34: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

¶ ³16 繰り返し文 whileを書くµ ´

コンピュータにある作業を繰り返させる方法の一つに while 文があります。

while( 条件式 ){

繰り返したい処理}

コンピュータはまず条件式を評価します。真であれば { } の間にある文を一回だけ実

行し、再び条件式を評価します。後はこれの繰り返しです。条件式が始めから偽であれ

ば { } の中は一度も実行されません。もし条件式が永久に真のままであれば、 { } の

中は無限に繰り返されます。

ある整数 a の n 乗を求める関数 power(a,n) を作ってみましょう。#include <iostream.h>

int power(int a, int n)

{

int result = 1; // 0 で初期化してはいけない!while(n != 0){result = result * a;n--;

}return result;

}

main(){int a,n;

cout << "aの値を入力して下さい。";cin >> a;

cout << "nの値を入力して下さい。";cin >> n;

cout << "aの n乗は" << power(a,n) << "です。" << endl;

}

while(n != 0) を while(n) と書くこともできます。しかし意図している条件を明確

にするために、n != 0 とする方がよいでしょう。

¶ ³17 繰り返し文 forを書くµ ´

while だけでどのような繰り返しも記述できますが、処理が複雑になるとソースがわ

かりにくくなってしまいます。そこで繰り返しを記述するもう一つの方法として for 文

があります。

32 TSG 部報 No. 199

Page 35: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

C++ 言語入門 第 1回

for( 開始文; 条件式; 継続文;){

繰り返したい処理}

コンピュータはまず開始文を実行します。次に条件式を評価し、真であれば { } の中

の処理を一回実行します。さらに継続文を実行し、また条件式を評価します。後はこの

繰り返しです。for はプログラムの構造を明確にすることができるのです。

for を使って整数 1から n までの和を求める関数 sum(n) を作ってみましょう。#include <iostream.h>

int sum(int n){int result = 0;

for(int i = 1; i <= n; i++) result += i;return result;

}

main(){int n;

cout << "nの値を入力して下さい。";cin >> n;

cout << "1から nまでの和は" << sum(n) << "です。" << endl;

}

for の開始文が int i = 1; になっています。開始文にはプログラム中で使える文を

そのまま置けますので、ここでは変数宣言をしているのです。この変数の有効範囲は for

の後の { } の中だけです。ただしこの例では繰り返したい処理が一つの文で書けたので

{ } を省略しました。

for(; 条件式 ;){} と書けば while( 条件式 ){} と全く同様な機能が得られます。

しかしこのような記述はソースが理解しにくくなるだけです。while と for をうまく使

い分けましょう。

17.1 ちょっと道草

少し前で aの n乗を求める関数 power()を作りました。しかしこの関数では構造上の

理由から実数乗の値を求めることはできません。実数乗を求められるようにしたい場合

は、math.h の中で定義されている数学関数 log() と exp() を組み合わせて作ります。

To be continued. . .

TSG 部報 No. 199 33

Page 36: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

初心者のための 8086講座

初心者のための8086講座第 2回

高野

どうも高野です。

95でこの原稿のデータをぶっ飛ばされてしまいました。(T_T)

やはり 8MBで 95なんぞを使ったのが悪かったらしい。

貧乏人は損じゃのう....

¶ ³どのようにデータが格納されているのか?µ ´

前回パソコンはメモリにデータを格納するとき 2進法で記憶させていると書きました

が、そのことについて、もう少し詳しく説明してみたいと思います。2進法とは 0と 1に

よってすべての数を表現することです。パソコンではこの 1と 0を電気が有るか無いか

で判断しているのです。たとえば■を 1、□を 0とした場合、

  データ    アドレス

□□■□■■□□  01H

□■■■□□□■  02H

■■□■□■■□  03H

□□■□■□□□  04H

■□□■■■□□  05H

□□□■□□□■  06H

上の表を参考にしてみると、アドレスが 04H のデータは 00101000 です。このように

8ビットを一つの単位としてとらえ、これを 1バイトと呼ぶわけです。

¶ ³アセンブラ言語µ ´

前回マシン語は 16進法で表すことが一般だと書きましたが、よっぽどコンピュータに

精通している人でない限り内容を理解することは不可能です。(いにしえのプログラマで

34 TSG 部報 No. 199

Page 37: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

初心者のための 8086講座

Z80のマシン語をすべて 16進法で暗記していた人が存在したらしい. . .)そこで、人間

がマシン語を扱う場合には、マシン語と一対一に対応したアセンブリ言語というモノを

使います。たとえばマシン語で B01A とはアセンブリ言語で示すと「MOV AL,1A」で表

されます。マシン語には 1つ 1つ記号が割り当てられており、その記号のことをニーモ

ニックと呼びます。(たとえば今さっき例に挙げた MOV など)ニーモニックからマシン

語に変換する作業のことをアセンブルといいます。この逆の作業を逆アセンブルまたは

ディスアセンブルといいます。

¶ ³データ転送命令µ ´

データ転送命令とは 8ビットまたは 16ビット単位で CPUを通してデータのやりとり

をする命令のことです。データ転送命令でもっともよく使われるのは MOV です。MOV <受け取る側>, <送り出す側>(レジスタ、メモリ) (レジスタ、メモリ、数値)

MOV は右側で指定したデータを左側のデータ格納場所に移動させる、すなわち「転

送」する命令です。データの移動する向きは「右から左」です。送り出す側はデータが

転送された後にも、はじめのデータが残ります。

メモリからレジスタにデータを転送するときのことを「ロード」

レジスタからメモリにデータを転送することを「ストア」

と、言います。

例をあげて説明していきましょう。

16Hをいう数値をALレジスタに転送したいとき

MOV AL,16H

オフセットアドレス(オフセットアドレスの解説は前号を見て下さい)「0541H」にAL

レジスタの内容をストアしたいとき

MOV [0541H],AL

ここで注意してもらいたいのは受け取る側に [] がついているところです。これをつ

けることで数値とアドレスを分別しているのです。だからこの場合「MOV 0541H,AL」は

意味をなさなくなり、また「MOV AL,16H」と「MOV AL,[16H]」とでは全く意味が違う

と言うことです。後者はオフセットアドレスが 0016Hのメモリのデータを ALに転送す

るという意味です。

TSG 部報 No. 199 35

Page 38: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

初心者のための 8086講座

次は 1ワード、つまり一度に 16ビット取り扱う場合です。1ワードの 1A56Hという

データを AXレジスタに転送するには

MOV AX, 1A56H

となります。1バイトの時と同じです。1AHは AHに入り、56Hは ALに入ります。

逆にレジスタからメモリにストアする場合も 1バイトの時と変わらないのですが、デー

タの格納のされ方に注意する必要があります。というのも、8086系 CPUの特徴として

「メモリ上のデータは実際のデータの上位バイトと下位バイトとが入れ替わる」のです。

詳しく説明すると

MOV [0123H],AX

という命令を CPUに与えたとします。このとき AXのデータは 16ビットですから、

オフセットアドレスが 0123Hと 0124Hのメモリに格納される訳です。このときAH(上

位バイト)は 0124Hに AL(下位バイト)は 0123Hに格納されます。

AXレジスタからBXレジスタの値をオフセットアドレスとしてメモリへストアしたい

とき

MOV [BX],AX

ここでは [] を使うことで、BXに直接 AXから転送するのではなく、BXレジスタの

指し示した(ポインティングした)メモリへ AXの内容を転送します。この考え方は実

は C言語でいうところのポインタそのものなのです。(ポインタについては部長の記事

を参照して下さい1))これの応用として、

MOV [BX + 5],AX

とすることで、BXから 5番目のメモリに AXのデータを転送することもできます。

さて以上で大体MOV命令の特徴がわかっていただけたでしょうか?MOV命令はマ

シン語のプログラムを組む上でもっともよく使う命令なので、しっかり理解して下さい。

ところでデータの格納場所はご存じの通りレジスタとメモリの 2種類があります。レ

ジスタにも前号で書いたように特殊なモノもあり、なかでもセグメントレジスタは操作

が制限されています。例えば、CS(コードセグメント)はMOV命令を使って直接書き

込むことはできません。よってセグメントレジスタは他のレジスタと区別して扱います。

データ転送は「セグメントレジスタ、その他のレジスタ、メモリ」という 3つのデー

タ格納場所とデータそのものを様々に組み合わせて行うことができます。たとえば、

MOV AL,0AAHMOV [0123H],AL

は一つの命令に書き直すことが可能で、

MOV [0123H],0AAH

と数値を直接メモリに書き込むことができます。

しかし、1)編注:おーい、部長のポインタの説明は次回以降だぞー

36 TSG 部報 No. 199

Page 39: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

初心者のための 8086講座

MOV AL,[0123H]MOV [3210H],AL

MOV [3210H],[0123H]

と書き直すことはできません。

このようにデータを転送できる組み合わせが決まっています。この組み合わせのこと

をアドレッシングモードといいます。

• レジスタ (AX,BX,CX,DX,SI,DI,BP,SP)

• データ (10H,1234H等)

• セグメントレジスタ (CS,DS,ES,SS)

• メモリ ([01234h] [45ACH] 等)

とするとき

• レジスタ ←→ レジスタ

• データ −→ レジスタ

• データ −→ メモリ

• セグメントレジスタ ←→ レジスタ

• レジスタ ←→ メモリ

• セグメントレジスタ ←→ メモリ

以上の様な組み合わせが可能です。(ただし CSレジスタに値を転送することはできま

せん)

レジスタを使ったアドレス指定を先に少しだけ説明しましたがここでもう少し詳しく

説明します。たとえば MOV AX,[BX+5] とした以外にも MOV AX,[BX+SI+5] と書くこと

もできます。ここでの「5」の値のことをディスプレーメントといいます。ここでもアド

レッシングモードの時と同じく、レジスタとディスプレーメントの組み合わせに制限が

あります。

レジスタとディスプレーメントの組み合わせ

• (BX,BP) + ディスプレーメント

例: [BP+1]

TSG 部報 No. 199 37

Page 40: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

初心者のための 8086講座

• (SI,DI) + ディスプレーメント

例: [SI+6]

• (BX,BP) + (SI,DI) + ディスプレーメ

例: [BX+DI+4], [BP+SI+6], [BX+DI+7]

ちなみにディスプレーメントで指定できる値は 1バイトまたは 1ワードです。

¶ ³算術演算命令µ ´

前号で説明したようにCPUにはデータの各種演算をやる機能が用意されています。こ

の各種演算はレジスタやメモリの中で行われるのでは無くて、実際にはALU (Arithmetic

and Logic Unit) と呼ばれている演算部で行われます。演算の対象となるレジスタやメモ

リからデータをこのALUに転送して、結果をメモリやレジスタに転送するのです。その

時演算の結果だけではなく、その結果が 0であったか負の数であったか等の状態をCPU

内のフラグレジスタにセットします。ここでは 8086のもつ算術演算命令の説明をしま

す。算術演算命令もデータ転送命令と同様にアドレッシングモードが決まっています。

加算減算命令

はじめに足し算をしてみましょう。足し算の命令は

ADD <足したい数>, <足したい数>

です。計算結果は左側に入りますので、左側には必ずレジスタかメモリを指定してや

らなくてはなりません。(以後レジスタと言ったらセグメントレジスタ以外のモノを指す

ことにします。)例えば ALレジスタに 1バイトのデータ 2AHを加算する場合

ADD AL,2AH

と書きます。ALに最初 11Hが入っていた場合、この命令の後には ALには 3BHが

入っていることになります。

次に引き算ですが、これも簡単で

SUB <引かれる数>, <引く数>

です。ALレジスタからオフセットアドレスが 1234Hに格納されているデータで減算

するとき、

SUB AL,[1234H]

です。この場合も計算結果がALレジスタに格納されることは言うまでもありません。

38 TSG 部報 No. 199

Page 41: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

初心者のための 8086講座

次はインクリメントとデクリメントです。この二つの言葉はあまり聞かれない言葉で

すが、インクリメントとはレジスタを +1、デクリメントとはレジスタを −1 することを

言います。ここでなぜこんな命令が必要なのか疑問に思う方がいるかもしれません。単

純に ADD命令を使えばいいような気もします。しかし、マシン語のプログラミングで

は +1 や −1 を頻繁に行います。そこで、ADD命令よりも高速な(つまりクロック数が

少ない)この命令を使います。これによって実行効率を高めるわけです。インクリメン

トの命令は

INC <数を一つ増やしたいレジスタ>

とします。

INC AL

ADD AL,1

と同じ意味です。同様にしてデクリメントの命令は

DEC <数を一つ減らしたいレジスタ>

と書きます。

それでは復習として少しマシン語で書いたプログラムを書いてみましょう

MOV BL,34H ;BLレジスタに 1バイトデータ 34をロードMOV AL,BL ;ALレジスタに BLレジスタに転送INC AL ;ALをインクリメントMOV [A123H],AL ;ALレジスタのデータをストアDEC BL ;BLをデクリメントADD AL,BL ;ALと BLを足すSUB AL,BL ;ALから BLを引く

なんかあまり意味のないプログラムですね (^_^;

2つのデータを比較する命令をコンペア命令、比較命令といいます。具体的に何をや

るかというと、引き算をやるのですが、引き算の結果そのものをメモリやレジスタ上に

は残しません。じゃあいったいなんのための命令かわかりません。そこでこの算術演算

命令の項のはじめで述べたことを思い出して下さい。ALUで計算された時に一緒にその

演算結果の状態をフラグレジスタに保存されると言うことを書きました。そうです、こ

の比較命令はこのフラグレジスタに状態を保存する命令なのです。

ここで詳しくフラグレジスタの説明をしておきましょう。フラグレジスタとは読んで

字の如く「旗」レジスタなのですが、このレジスタにはビットごとに意味を持っていて、

個々のビットごとつまりフラグごとに単独に動作します。そのため他のレジスタのよう

に 16ビットのレジスタとしてプログラムから自由に操作することができません。フラ

グを 1にすることを「セット」するといい、0にすることを「リセット」または「クリ

ア」と言います。フラグレジスタのビットごと(フラグごと)の持つ意味を下の表に書

きます。

TSG 部報 No. 199 39

Page 42: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

初心者のための 8086講座

フラグレジスタ

■ ■ ■ ■ OF DF IF TF SF ZF ■ AF ■ PF ■ CF

OF オーバーフローフラグ 符号付き演算で桁あふれが生じたときに

セットさせる。

DF ディレクションフラグ ストリング操作命令においてポインタの

増減方向を示す。

IF インタラプトイネーブ セットすると外部割込を受け付けなくな

る。

TF トラップフラグ シングルステップモードで実行するとき

のフラグ

SF サインフラグ 演算結果の符号を表す。負ならばセット

される。

ZF ゼロフラグ 演算結果がゼロであればセットされる

AF 補助キャリーフラグ BCD演算で使用されるキャリーフラグ

PF パリティーフラグ 演算の結果、1となるビット数が偶数の

時セットされ、奇数の時クリアされる

CF キャリーフラグ 演算の結果、桁上がりが生じた場合にセッ

トされる

一つのフラグ 1ビットです。■は何も役割を割り当てられていないことを示しています。

「ストリング命令」とか「シングルステップモード」とか聞き慣れない言葉が出てき

ますがここではあまり気にしないで下さい。

フラグレジスタはこのように命令ごとに影響を受けるフラグが決まっています。もち

ろんフラグに何も影響を与えない命令も存在します。

さて話を比較命令に移して考えて見ましょう。比較命令は

CMP <比較されるデータ>, <比較するデータ>

比較されるデータから比較するデータを減算しその結果は保存されませんが、フラグ

レジスタには保存されます。比較命令の場合は SF,ZF,PFが変化します。この比較命令

は単独では使用されず、「条件分岐命令」と組み合わせて使用されます。具体的な使用法

は「条件分岐命令」のところで解説します。

乗除算命令

乗除算命令は他の演算とは異なり使用できるレジスタが決まっています。使用できる

レジスタは AXレジスタまたは ALレジスタです。DXレジスタも使われることもあり

ます。

かけ算の命令は

40 TSG 部報 No. 199

Page 43: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

初心者のための 8086講座

MUL <掛ける数>

掛ける数が 8ビットの時は ALとかけ算をし、その結果を AXに転送されます。掛け

る数が 16ビットの時は AXとかけ算をし、結果を上位ビットを DXに、下位ビットを

AXに転送します。たとえば

MUL BX

とかけば AXとかけ算をし、その結果を DXと AXに転送するわけです。

わり算の命令は

DIV <割る数>

割る数が 8ビットの場合はAXレジスタをわり算し、商をALレジスタに、余りをAH

レジスタに転送します。割る数が 16ビットの時は DXを上位 16ビットにし AXを下位

16ビットとして、割られる数を 32ビットにしわり算をします。その後、商を AXレジ

スタに、余りを DXレジスタに転送します。MUL,DIVともに割る数にはレジスタ、数

値、メモリのオフセットアドレスを指定してやることができます。

¶ ³PTR演算子µ ´

さて上で見たように乗除算の命令では指定するデータの大きさによって、命令の意味

が異なってくることがわかりました。直接値やレジスタの場合は 8ビットか 16ビットか

はっきりしているので問題はないのですが、メモリを対象としオフセットアドレスを指

定した場合 1バイトなのか 1ワードなのかはっきりしません。そのことは明確にするた

めにアセンブラ言語では「PTR演算子」なるモノを利用します。

BYTE PTR [オフセットアドレス]WORD PTR [オフセットアドレス]

前者はバイト単位のデータをメモリから読み出し、後者はワード単位(つまり 2バイ

ト)でデータを読み出します。例えば

INC [0123H]

ではだめで

INC BYTE PTR [0123H]

または

INC WORD PTR [0123H]

としなければなりません。

またデータ転送命令等の場合も同様です。

MOV [0FFFH], 3AH

これは一見あっているようですが、実はエラーが出るのです。

TSG 部報 No. 199 41

Page 44: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

初心者のための 8086講座

MOV BYTE PTR [0125H],3AH

または

MOV WORD PTR [0125H],3AH

としなければなりません。前者は納得行きますが、後者はなにかおかしな気もします。

しかし、[0126H]には「00H」がはいるのです。

42 TSG 部報 No. 199

Page 45: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

文字コードの話

文字コードの話短期集中連載 第 1回

早坂くりす

¶ ³はじめにµ ´

ASCIIだけで用が足りるアメリカと違って、私たちは日本語を扱わなくてはならないた

め、より深く文字コードの問題と関わらざるをえません。それでも、MS-DOS/Windows

やMacを使う限りでは、ASCIIとシフト JIS(たまに JIS)を知っていれば済みますが、

UNIXやインターネットを使い始めると、JIS・EUC・シフト JISとさまざまな日本語コー

ドに頭を悩ませることになります。さらに最近はUnicodeも登場し、Windows95/NTの

内部コードとして実際に使われ始めています。

その他にも、文字コードに関してはいろいろ疑問があることと思います。

• 日米で円記号とバックスラッシュが違うのはなぜか?

• JISコードのエスケープシーケンスはどれが正しいの?

• EUCの半角カタカナはなぜ 2バイト?

• 非日本語端末で表示されるへんなアルファベットの正体は?

こういった問題に対処するには、文字コードに関する体系的な理解が必要となります。

なお、この連載では、とっつきにくさを避けるため、最初のうちは未定義の用語や必

ずしも厳密でない説明を用いることがありますので、正しい理解のためには必ず最後ま

で読んでください。(^_^)

¶ ³1 日本語のコード体系µ ´

この章では、もっとも身近な日本語のコード体系について概観します。

昔 (1970年代まで) は各メーカーごとにさまざまなコード体系が使われていましたが、

1978年に JIS漢字が制定されてからは、これに基づいたコード体系が完全に主流となり

ました。

TSG 部報 No. 199 43

Page 46: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

文字コードの話

1.1 JISコード

インターネットで日本語のメールやネットニュースに使われているコード体系です。

制御コード 0x00~0x1F、0x7F

ASCII文字 0x20~0x7E

カタカナ 0x21~0x5F (7ビット) / 0xA1~0xDF (8ビット)

漢字 0x2121~0x7E7E

(第 1バイト・第 2バイトとも 0x21~0x7E)

補助漢字 0x2121~0x7E7E

(第 1バイト・第 2バイトとも 0x21~0x7E)

ASCIIとカタカナを基本とし、漢字が追加されています。ASCIIと漢字のコード範囲

が重複するため、以下のようなエスケープシーケンスによって切り替えます。

漢字の開始 ESC $ @ または ESC $ B

ASCIIの開始 ESC ( B または ESC ( J

補助漢字を含めることも可能であり、補助漢字の開始のシーケンスは ESC $ ( D とな

ります。

また、7ビットの環境では、カタカナもこれらと重複するため、制御コードまたはエ

スケープシーケンスで切り替えます。

カタカナの開始 SO (0x0E) または ESC ( I

ASCIIの開始 SI (0x0F) または ESC ( B または ESC ( J

このようにカタカナも 7ビットで表現するものを俗に 7ビット JISと呼び、これに対

してカタカナを 8ビットで表現するものを俗に 8ビット JISと呼びます。

JISコードの利点の一つは、7ビットの通信路でも伝送できることです。未だに 7ビッ

トの伝送路が少なくないインターネットの世界で使われている理由もここにあります。

しかし、エスケープシーケンスの存在が厄介ですので、コンピュータ内部のデータ処理

ではあまり使われません。

なお、98の N88 日本語 BASICや、PC-PR系プリンタなどでも同様のコードが使わ

れていますが、エスケープシーケンスが “ESC K” と “ESC H” という独自のものになっ

ています。これは通称 NEC JISと呼びます。

1.2 シフト JIS (MS漢字コード)

パソコンでおなじみのコード体系です。一部のUNIX(NEWS-OS、HP-UXなど)でも

採用されています。その起源は、日本最初の 16ビットパソコンである三菱Multi16にさ

かのぼります。Multi16にCP/M-86の日本語対応版を搭載するにあたって、処理の容易

なコードとしてマイクロソフトなど数社が策定したのがシフト JISです。

44 TSG 部報 No. 199

Page 47: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

文字コードの話

制御コード 0x00~0x1F、0x7F

ASCII文字 0x20~0x7E

カタカナ 0xA1~0xDF

漢字 0x8140~0x9FFC、0xE040~0xFCFC

(第 1バイト: 0x81~0x9F、0xE0~0xFC

第 2バイト: 0x40~0x7E、0x80~0xFC)

8ビットパソコンで広く使われていた ASCIIとカタカナをそのまま継承し、なおかつ

JISコードのようなエスケープシーケンスを使わずに漢字を混在させるために、所定の

計算式によって JIS漢字コードを変換しています。

漢字の第 1バイトはASCIIやカタカナと重複しないように配置されており、第 1バイ

トを見ただけで文字種がわかるようになっています。漢字の第 2バイトについても、区

切り文字として使われることの多い ASCIIの 0x20~0x3Fや、制御コードである 0x7F

と重複しないようになっています。また、画面上ではASCIIやカタカナと漢字の幅の比

率は 1:2であることが多いですが、文字コードのバイト数もこれと同じく 1:2になって

います。このような特長のため、特別にシフト JISに対応していないシステム上でもな

んとか日本語を通せる場合が少なくありません。

欠点としては、コード空間に余裕が少なく拡張性に乏しい (例えば、補助漢字を入れ

るスペースがない) こと、第 2バイトに含まれる 0x40~0x7Eのコード (特に、ASCIIの

バックスラッシュ \ にあたる 0x5C) が問題となる場合があること、MSBが落ちたとき

の復元が困難なこと、などがあげられます。

1.3 日本語 EUC

UNIXの日本語環境でよく使われるコード体系です。EUCは Extended UNIX Code

の略で、UNIXの多言語対応の一環として制定されました。EUCには日本語 EUCの他

に中国語 EUC、韓国語 EUC などもあります。日本語 EUC のことを UJIS (Unixized

JIS) とも呼びます。

制御コード 0x00~0x1F、0x7F

ASCII文字 0x20~0x7E

漢字 0xA1A1~0xFEFE

(第 1バイト・第 2バイトとも 0xA1~0xFE)

カタカナ 0x8EA1~0x8EDF

補助漢字 0x8FA1A1~0x8FFEFE

(第 2バイト・第 3バイトとも 0xA1~0xFE)

JISやシフト JISとの大きな相違点は、カタカナが冷遇されていることです。JIS漢字

コードの各バイトのMSBを 1にすることにより漢字を導入したため、これと重複する

TSG 部報 No. 199 45

Page 48: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

文字コードの話

カタカナは補助的な扱いとなり、0x8E のプレフィクス付きの 2バイトコードになって

います。また、0x8F のプレフィクスにより補助漢字も表現でき、これは 3バイトになり

ます。

特長としては、エスケープシーケンスがない、第 1バイトを見ただけで文字種がわか

る、漢字の第 2バイトがASCIIと重複しない、ASCIIと漢字のバイト数の比率が文字の

幅と一致する、などシフト JISと類似した点に加えて、JISとのコード変換が容易なこ

とがあげられます。

ただし、バイト数はカタカナや補助漢字まで考慮すると複雑となります。事実、EUC

を採用したシステムでも、補助漢字までサポートしている例は非常に少なく、カタカナ

のサポートもつい最近まではなおざりにされてきました。日本のインターネット上では、

今に至るまでカタカナの使用がタブーとされていますが、これは、EUCを採用しながら

カタカナをサポートしていないシステムが多かったためでもあります。

他の欠点としては、シフト JISよりマシとはいえ拡張性に限界があること、結果的に

シフト JISと似て非なるものとなってしまい日本語コードの混乱を助長してしまったこ

と、などです。

¶ ³2 ASCIIと 1バイト文字コードµ ´

この章は、ASCIIと、それをベースにした 1バイト文字コードについて、詳しく見て

いきます。

2.1 ASCII (American Standard Code for Information Interchange)

おなじみASCIIは 7ビットの文字コードであり、その構成は次のようになっています。

0x00~0x1F 制御文字 (control characters)

0x20 空白 (SP)

0x21~0x7E 図形文字 (graphic characters)

0x7F 制御文字DEL (delete)

制御文字とはいわゆるコントロールコードのことです。図形文字というと●とか▲と

か ♥ とか罫線とかを思い浮かべるかもしれませんが、そうではなくて、アルファベット・数字・記号などの「目に見える形をもった」普通の文字のことです。空白は制御文字と

も図形文字ともみなすことができます。個々の制御文字や図形文字の詳細については割

愛しますが、図形文字で特に注意を要するのは次のコードです。

46 TSG 部報 No. 199

Page 49: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

文字コードの話

0x5C バックスラッシュ「\」 (≠円記号)

0x7C 縦棒「|」 (≠破線)

0x7E チルダ「~」 (≠オーバーライン)

ASCIIはあくまで 7ビットですので、0x80~0xFFは含まれません。パソコンのマニュ

アルなどを見ると、0x80~0xFFにカタカナやら何やらが入ったものを「ASCIIコード

表」と称していることが多いですが、これはまちがいです。

余談ですが、制御文字の中でDELだけ 0x7Fなんていうところに飛ばされているのは

なぜでしょうか? これは、データ入力媒体として紙テープを使っていたころの名残だと

いわれています。紙テープでは、所定の位置に穴を空けてあるかどうかによって 2進数

の 1/0を区別します (SunOSの ppt(6)を参照)。1文字は 7ビットですから、7つの位

置の穴の有無で 1文字を表します。で、もし穴を空けるときにまちがってしまった場合、

穴をふさぐのは面倒ですので、そのまちがいを含む 7ビット分全部の穴を空けて「この

字はまちがいだから削除ね」ということにしていました。つまり、「削除」→「全ビット

1」→「0x7F」というわけです。

2.2 ISO 646

ISO (International Standardization Organization、国際標準化機構) では、国際的な

工業規格を策定しています。コンピュータに関係のある標準化団体はいくつかあります

が、ISOはその代表的なものの一つです。フロッピーディスク、CD-ROM、MOディス

クなども ISOの規格になっており、機種を超えて互換を保てるようになっています。

文字コードに関しても ISO規格は中心的役割を担っています。まずは ISO 646という

規格の登場です。これは、もともとアメリカ/英語用の規格であるASCIIを、他の国/言語

用に一部変更できるようにしたものです。サンプルとして IRV (International Reference

Version)というものを用意しておき、これを各国が自国の規格として採用するとき、そ

の中の一部のコードに関しては違う文字を割り当ててもよい、というふうになっていま

す。実際には IRVは ASCIIと同じものです (数年前までは違っていた)。

IRVのうち、文字の割り当てを変更することが認められているコードは次の 12個で

す。参考として、IRV(ASCII)で割り当てられている文字を併記します。

0x23 # 0x5C \ 0x7B {

0x24 $ 0x5D [ 0x7B |

0x40 @ 0x5E ^ 0x7B }

0x5B [ 0x60 ‘ 0x7B ~

ISO 646 のアメリカ版すなわち ASCII では、これらの文字はそのままですが、ISO

646の各国版を見てみると、これらのコードに割り当てられている文字がそれぞれ違っ

ています。例えば、ヨーロッパの多くの言語では、アクセント記号付きの文字が必要な

TSG 部報 No. 199 47

Page 50: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

文字コードの話

ので、それらをここに割り当てています。また、これだけでは足りない場合は、制御文

字 BS(backspace)を使い、合成文字として表現することを認めています。例えば、a 表

現する場合は、^ BS a となります。

ISO 646の日本版は、IRVの 0x5Cを円記号 (Y=) に、0x7Eをオーバーライン (_) に

したものです。これは JIS X 0201 という JIS 規格になっており、JIS ローマ文字集合

(JIS Roman)と呼ばれています。国産のコンピュータはたいていこれを採用しているた

め、0x5C が円記号に、0x7E がオーバーラインになっているというわけです。ただし、

NECの PCシリーズとその互換機に関しては、0x7E は IRVと同じチルダになってお

り、0x7C は IRVとも JIS X 0201 とも違う「破線」になっています。この結果、PCシ

リーズの 0x21~0x7Eの図形文字集合は、ISO 646のどの版とも一致しない独自のもの

になっています (ついでに言うと、古いマシンでは 0x60が空白になっている)。

ところで、シリアルプリンタを持っている人は、マニュアルのディップスイッチの項を

見てください。「各国文字の選択」という設定で、日本・アメリカ・イギリス・ドイツ・

スウェーデンなどの選択肢があると思います。これはまさしく ISO 646の各国版を切り

替えていることに他なりません。

ISO 646のこのような仕組みは、コンピュータのメモリや通信路が限られていた時代

に、7ビットという狭いコード空間でなんとかやりくりするためのものだったわけです

が、当然の結果として、同じコードでも各国版によって表現する文字が違ってしまうと

いう問題があります。JIS X 0201におけるバックスラッシュと円記号の違いはみなさん

もご存じの通りです。

しかし、日本ではその程度ですからまだ我慢できますが、上記のコードにアクセント

記号付きアルファベットなどを割り当ててしまった国ではそれどころではありません。

特に CやUNIXでは上記の記号を多用しますが、これらがすべて「u」やら「e」やらに

なってしまっているのです。これではとても Cや UNIXを使ってはいられません (この

問題に熱心なのはデンマークで、これらの記号を使わずにCを記述するための代用記法

トライグラフを提唱しています)。

最近は、ASCIIをもとにした ISO 8859-1 (後述) などの 8ビットコードを使えるシス

テムが一般化したため、7ビットでしかも一国でしか通用しない ISO 646各国版にこだ

わる必要もなくなってきました。そのため、ISO 646各国版は (日本を除いて) 流行らな

くなりつつあり、ASCIIをそのまま使うケースが多くなっています。

2.3 8ビットコード

ラテンアルファベットを使うヨーロッパ諸語 (英独仏など)は、ISO 646でもなんとか

表現できます。しかし、ロシア語・ギリシア語・日本語などの、文字体系が全く異なる

言語は表現できません。かといって、アメリカ/英語/ASCIIがコンピュータ界を支配し

ている現状を考えると、ISO 646を排除して独自のコードを使うのは現実的ではありま

48 TSG 部報 No. 199

Page 51: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

文字コードの話

せん。したがって、ISO 646(または ASCII)を 8ビットに拡張し、0x80~0xFFに文字

を追加しようという考えが生まれます。

その一つが、これもおなじみ JISカタカナです。前述の JIS X 0201では、ISO 646の

日本版を定めると共に、これを 8ビットに拡張し、0xA1~0xDFにカタカナを入れまし

た。つまり、JIS X 0201の左半分 (0x00~0x7F) は ISO 646日本版で、右半分 (0x80~

0xFF)は日本独自規格のカタカナというわけです。当時はまだコンピュータで漢字を扱

うのが容易でなかったため、この規格は広く受け入れられました。

一方、欧米のコンピュータでも、ASCIIを 8ビットに拡張して、そこにアクセント記

号付きアルファベットや罫線を入れるようになりました。

パソコンの世界では、IBM PCの普及にともなって PCのコードが有力になりました。

DOSのマニュアルにあるコードページ 437、WindowsにおけるOEMコードセットとい

うコードです。これの右半分には、アクセント記号つきラテンアルファベット・罫線・各

種記号が入っています。しかし、言語によってはこれでも不十分なので、EGAや VGA

では右半分が PCG (死語 :-) ) になっており、ここのフォントを入れ換えることができ

るようになっています。こうして、IBM PCのコードにはコードページと呼ばれるいくつ

もの変種ができました。これらもDOSのマニュアルに載っています。なお、Macintosh

は IBM PCとはまた違った拡張コードを持っています。

コードページ 名称 (言語) 文字種

437 IBM PC基本 ラテン文字

850 多言語 (西欧諸語) ラテン文字

852 スラブ (東欧)語 ラテン文字

857 トルコ語 ラテン文字

860 ポルトガル語 ラテン文字

861 アイスランド語 ラテン文字

863 カナダフランス語 ラテン文字

865 北欧語 ラテン文字

869 ギリシア語 ギリシア文字

932 日本語 カタカナ (JIS X 0201)

また、ISOでも ASCIIをベースとした 8ビットコードの規格をいくつか制定しまし

た。その中でも有力なものが、ISO 8859という規格です。これも IBM PC同様、ASCII

を左半分に持ついくつもの変種 (現在 10個) からなっています。

TSG 部報 No. 199 49

Page 52: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

文字コードの話

図 1: JIS X 0201 のコード配列

50 TSG 部報 No. 199

Page 53: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

文字コードの話

ISO 8859-1 (Latin-1) ラテン文字 西欧諸語

ISO 8859-2 (Latin-2) ラテン文字 東欧諸語

ISO 8859-3 (Latin-3) ラテン文字 エスペラントなど

ISO 8859-4 (Latin-4) ラテン文字

ISO 8859-5 キリル文字 ロシア語など

ISO 8859-6 アラビア文字 アラビア語

ISO 8859-7 ギリシア文字 ギリシア語

ISO 8859-8 ヘブライ文字 ヘブライ語

ISO 8859-9 (Latin-5) ラテン文字 トルコ語など

ISO 8859-10 (Latin-6) ラテン文字 北欧語など

このうち ISO 8859-1、通称 Latin-1が広く使われています。ワークステーションのコ

ンソール画面や xtermなどで 8ビットコードを表示させると出てくるのが、この Latin-1

です。また、Windowsも「ANSIキャラクタセット」という名前で Latin-1を正式採用

しました。それ以外の ISO 8859シリーズは、一応国際規格ではありますが、それぞれ

の言語のコミュニティの外ではあまり目にすることはありません。

IBMの各コードページや ISO 8859のそれぞれは、ISO 646よりもずっと多くの文字

を含んでいますので、適用範囲も広く、一つのコード表を複数の国・言語で共通に使う

ことが可能です。たとえば、Latin-1だけで英語・ドイツ語・フランス語など西欧の主要

言語をカバーすることができます。

しかしまた、ラテン文字のコード表がいくつもあることに気がつくでしょう。これは、

アクセント記号付きラテン文字の種類が多すぎて、一つのコード表に入り切れなかった

結果です。また、ギリシア文字のようなまったく異なる文字を入れる余地もないので、こ

れまた別のコード表になっています。どうしても混在させたければコード表を切り替え

るしかありません。この問題は、8ビットというコード空間が本質的に狭すぎるのが原

因であり、複数の国や言語で共通に使えるとはいっても、その範囲は自ずから限られて

しまいます。

とくに 8859の場合、当初の目標では、646各国版のようなわずらわしさを避けるため

に、コード空間を広げた代わりに合成文字を廃止して 8ビット固定長にしたのですが、

結局は似て非なるコード表がいくつもできてしまい、言語によって切り替えて使わなく

てはならないという、646とたいして変わらない状況に陥ってしまいました。

なお、ISOの 8ビットコード (8859に限らず) は、次のような構成になっています。

0x00~0x1F 制御文字の領域

0x20~0x7E ASCII図形文字

0x7F 制御文字 DEL

0x80~0x9F 制御文字の領域

0xA0~0xFF 追加の図形文字

TSG 部報 No. 199 51

Page 54: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

文字コードの話

図 2: Latin 1 のコード配列

52 TSG 部報 No. 199

Page 55: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

文字コードの話

図 3: ヘブライ文字 ISO 8859-8 のコード配列

TSG 部報 No. 199 53

Page 56: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

文字コードの話

つまり、右半分にも左半分同様に制御文字の領域があるということです。これについ

ては ISO 2022の解説に譲ります。

今後の章目次第 3章: JIS漢字コードと符号化法  3.1 JIS X 0208  3.2 JIS X 0212  3.3 符号化文字集合 (coded character set)  3.4 エンコーディング法 (encoding method, encoding scheme)第 4章: ISO-2022  4.1 ISO 2022の考え方  4.2 7単位系の指示と呼び出し  4.3 ISO 2022で使える文字集合  4.4 呼び出し:ロッキングシフトとシングルシフト  4.5 8単位系の指示と呼び出し  4.6 ISO 2022の制御機能  4.7 ISO 2022の運用第 5章: ISO 2022の実例  5.1 EUC  5.2 JISエンコーディング (JUNETコード、ISO-2022-JP)  5.3 シフト JIS  5.4 ISO 8859、JIS X 0201など  5.5 C1制御文字第 6章: 中国語・韓国語の文字コード  6.1 GB 2312  6.2 Big-5と CNS 11643  6.3 KS C 5601  6.4 組合せ型ハングルコード第 7章: ISO 10646と Unicode  7.1 ISO 10646成立の経緯  7.2 UCSの構造と特徴  7.3 UTF

54 TSG 部報 No. 199

Page 57: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

TSG用語の基礎知識 Ver. 1.0

TSG用語の基礎知識 Ver. 1.0ZERO

[47項目収録]

あいとうくん [相藤君] (人名)  

italk上に存在する人工無能。彼の主食は italkのログである。このため、一昔前に

流行った人工無能 (相藤君は人工無能なのだが)の如く、italkを利用している人間

の生き写し (笑)となる。最近相藤君の言動が「あやしい」と思ったあなた、責任

の一端はあなたにもあるのです。

相藤君のお友達には中継君や伝言君がいる。[→ italk]

あつい [熱い] (形容詞)  

1. 何かに燃えている様子を指す。その燃えているものがあやしければあやしいほ

ど体感温度は高くなる (笑) TSG内では「○インスイーパー」や「せらだ○」が有

名。また、Gや Tの「ぷよ○よ」の熱さは、TSGの風物詩となっている。[→ そ

れぞれの項目を参照]

2. 夏の学館 305の状態。もはや「暑い」を通り越している。昨年、基金によって

扇風機が導入されたのだが……

いぬ。びーびーえす [いぬ。BBS] (固有名詞)  

自宅で通信をしているTSGerならほとんどの人物が入っている (と思われる) BBS。

但し、TSGerオンリーのネットというわけではないので注意。しかし、その構成

人員の偏り (^^; から TSGに関する連絡はここを通して行われることが多く (ほ

かに newsや情報棟メールでも行われるが)、特に長期休暇中やテスト中などに重

宝するので、通信ができる環境が整っているのなら入った方が良い。

どういうネットかはゲストログインして自分の目で確かめること。

インターネット (名詞)  

1. 概念の良くわからない物 (笑) この辺の話はいぬ。BBSの過去ログ参照のこと。

2. サークルオリの際副○長や一部コン○委員が「インターネットに興味のある方、

始めたい方、きれいなホームページを作りたい方」と宣伝を行い隣のアマチュア○

線部に「そんなメジャーなものまで使うなんて卑怯だ」と言わしめたが、TSGの

部室からは現在インターネットへの接続は行えない (爆)

TSG 部報 No. 199 55

Page 58: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

TSG用語の基礎知識 Ver. 1.0

但し、詳しい人はたくさんいるので (例えば誰とはいわないが編○長とか) 聞きま

くればちゃんと使えるようになる。大体、ああいう物は危険でない範囲 (重要!) で

自分で積極的にいじって覚える物だ (と筆者は思うのだが、うまく行かないよね)。

うらのらいぶらりあん [裏のライブラリアン] (固有名詞)  

こういう役職が存在するわけではなく、便宜上こう呼んでいる。実体は、単に部室

の Trade MOのバックアップをとっている人間のことである。但し、勝手に整理

を行っているので余り役には立たないらしいが (爆)、万が一の時には何かの役に

は立つかもしれない。

裏のライブラリアンには、もう一つ別の仕事があるとされているが、明らかにはさ

れていない (謎) [→ 影のライブラリアン・ライブラリアン]

うらわれっず [浦和レッズ] (固有名詞)  

言わずと知れた浦和がホームタウンのサッカーチーム。何でこんな所に出るのかわ

からないって? それは、部室でレッズをバカにすると大変なことが起こるからなの

だ (やや嘘) Gは駒沢の年間チケットを買うほどのレッズ狂なのだ。さわらぬ神に

祟りなし。

しかしながら、大宮市民のくせにグランパスファンの Hにとってはレッズはただ

のお得意さま (笑)であり、部室のサッカーゲームでレッズをいぢめてはG としば

しば抗争を起こしている。そのうち恐ろしいことが起こるのではないかと部員は

戦々恐々としている……はずはない (笑) [→ ライブラリアン]

エ○ァる (五段動詞)  

テレビ東京で毎週水曜日に放映していたTVアニメ「新世紀エヴァ○ゲリオン」を

見ること (嘘)

TSGには○ヴァにはまっている方がたくさんいらっしゃるので興味のある人は話

を聞いてみると良い。ヱ○スビールの売り上げが伸びただとかTV放映版と LDで

はどこが違うだとか、興味深い話が聞けるだろう。

昨年の駒場祭では上映会も行われた。今年もきっと行われるのであろう (^^;

おちものぶんかかい [落ちモノ分科会] (固有名詞)  

落ちモノに人生哲学を見いだした人々の集団。「ぷよぷ○」に始まり、「○ずる玉」

へも触手を伸ばす。何故か落ちモノではない「せらだ○」にはまっている人間も

多い。

最近は活動が下火であるが、「進め!対戦ぱずる○ま」だとか「○きメモのぱず○だ

ま」が導入されるとまた火がつくのではないかと筆者は見ているのだが……(後者

56 TSG 部報 No. 199

Page 59: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

TSG用語の基礎知識 Ver. 1.0

の場合は落ちモノ分科会とは別の方に延焼しそうだが (笑)) [→ ぱ○るだま、ぷよ

○よ]

おやぢ [親父] (固有名詞)  

言わずと知れた「○拳」の三島平○のこと。TSGにはいわゆるひとつの「親父使

い」が多く、即死コンボが飛び交い、非力キャラ使いの Hにとっては地獄のよう

な毎日である。[→ 鉄○]

かいけい [会計] (名詞)  

その名の通り、TSGを巡るお金の動きを全て把握しなければならないお仕事 (但

し、コンパなどの特別なものは除く)。人格・信用共に備わっていなければ任せら

れないお仕事である (ちょっと大げさかな?)。今年の会計の人は別のサークルでも

偉い人なので (今年の 2年の役職者にはこういう人物が結構いる) 滅多に部室に現

れないが、お金を立て替えている人は会ったときには必ず領収書を添えて請求する

こと。領収書がない場合は、勿論自腹である (^^;

かげのらいぶらりあん [影のライブラリアン] (固有名詞)  

これも正式な役職ではなく、便宜上の名称。本来正ライブラリアン (^^; の仕事で

ある部室のコンピューターの管理を担っている。しかし、FM-TOWNSは専門外

であるらしい (笑) 影のライブラリアンの力は非常に強大で、何人たりとも逆らう

ことは許されない (笑) [→ 裏のライブラリアン・ライブラリアン]

けーきがしゅしょく [「ケーキが主食」] (格言?)  

……私の口からは多くは語れません……(笑)

ケーキパーティー (固有名詞)  

名前の通りひたすらケーキばかりを食べる悪魔のようなパーティー。筆者は残念な

がら (?)参加はしていないが、それはそれは恐ろしいものらしい。

また、このイベントはわざわざセンターの日に合わせて行われる。まじめにテスト

を受けている人々がいる一方でこんなことをしている悪い人々も世の中にはいると

いうことを覚えておきましょう (嘘)

ゲーセン (名詞)  

コンパ委員のとある人物曰く「我々のラグランジュ・ポイント」(どういう意味か

は、物理授業をまじめに聞けばわかる)。(註:筆者は習っていないが)

コンパ (名詞)  

TSG 部報 No. 199 57

Page 60: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

TSG用語の基礎知識 Ver. 1.0

TSGのコンパの基本は「食」である。食べ放題でもない限り、食べ物の皿がやっ

てくると欠食児童 (失礼!)のような勢いでさらに箸がつっこまれ、ものの数秒で皿

の中身が消滅してしまう。そう、そこはもう戦場なのだ (笑)

反対に、酒類の強制は一切ない (無論、上記のような状態なのだから「食え! 」と

いうようなことは食べ放題でもない限り絶対にあり得ないし、食べ放題でもまずな

いはず)。

こんぱいいん [コンパ委員] (名詞)  

コンパの段取りや旅行の段取りを行う人々。一応、それなりに偉いらしい。今年度

は 4名が名を連ねる。今年のコンパ委員はイコール PS人間であり、一部方面から

行く末を心配する声があがっている (嘘) 早くも合宿の行く先を決めかねている彼

らに明日はあるのか?(笑)

さる [猿] (名詞)  

一般的にも「~猿」とつけられて「~しまくり人間」の意を表すが、TSG に於い

ては何もつけない場合は「italk猿」を指す。どういう意味かは押して知るべし。誰

が猿で誰がボスザルかは、italkにしょっちゅう入ってみればわかるので知りたい人

はやってみると良い。しかし、これをやった人も既に猿の仲間入りを果たしたこと

になってしまうのだが...(笑) 詳しくは、オリパンフの Zepherさんの記事を参照の

こと。[→ 廃人・ヲ]

しょむ [庶務] (名詞)  

いろいろな仕事をするなくてはならない人々。見かけても決して石を投げたりし

てはいけない。昨年度から導入された比較的新しい役職。今年度から 2名に増員。

仕事の中身は庶務の人々に弟子入りして聞くのが早い。今年の庶務の人々は……な

んというか……その……非常に言いにくいのだが……ええっと……う~む……ま、

そういうわけだ! (^^;

「すべてのまいんはわたしのもの」 [「すべてのマインは私のもの」] (格言)  

あのTSG最大の汚点の 1つに数えられている (嘘)「駒場祭マインス○ーパージャッ

ク事件」の首謀者の口から後に発せられた言葉。確かにひどいが、誰もが納得する

内容であるという (笑) [→ マイン○イーパー、TSG部報 No.195]

せら○ま (固有名詞)  

コンパイルが出したパズルゲーム。一般受けはしていないようだが、TSG 内では

熱い戦いが繰り広げられていた時期もあった...一部の人間によって (笑) [→ せ○

だま団]

58 TSG 部報 No. 199

Page 61: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

TSG用語の基礎知識 Ver. 1.0

ぜ○だまだん [せ○だま団] (固有名詞)  

コンパイルの「○らだま」の Time Attackに燃える人々の集団。彼らの戦いは既

にコンマ 01秒の世界に突入。F1も真っ青な戦いを繰り広げている。目標はコンパ

イルの社内タイムで、そのためにはいかなる努力も惜しまない。特に首領格の T

などは、「音源ドライバを組み込まないと割り込みが無くてその分速い~」などと

宣い、Oは「非公認タイム」としてそれを否定している。もはや「せらだま廃」の

世界である。構成人員は 4名で、一時期は 305の 98系 2機が両方とも占領されて

いた。

目下の所、ライバルは鉄拳分科会である (嘘)。首領が「○ずるだま」に走り最近の

活動は下火であるが、熱さでは TSG一との呼び声も高い (爆)。

追加情報:首領が発した「飽きた」の一言に避難が集中! しかも、鉄拳分科会に移

籍を画策中であることも判明し、非難の声が高まっている。危うし、T(爆) [→ せら○ま、ラ○ナーズ・ハイ]

てぃーえすじー [TSG] (固有名詞)  

「理論科学グループ」の略称であるという説と「テニス・スキー・ゲーム」の略称

であるという説と「鉄拳最強グループ」の略称であるという説があるが真偽のほど

は明らかにされていない。筆者は、「東大スーパー娯楽集団」とか「とにかく趣味

の人のグループ」の略ではないかと思うのだが...(嘘です!)真相が知りたくば毎日

部室に来ることだ。[→ 理論科学グループ]

てっけ○ [鉄○] (固有名詞)  

ナムコの出した傑作 3D格闘ゲーム。多くの猿を造り出し、分科会も設立されてい

る。部室の PSの前では今日も熱い戦いが繰り広げられている。発売日前日に 2の

導入も予定され、さらなる猿 (廃)を生むのではないかと懸念されていたが、実際

に導入され、新なる猿を大量生産している。

間違っても「研」の字を入れてはいけない (爆) [→ 親父、鉄○ 2]

てっけ○ 2 [鉄○ 2] (固有名詞)  

当たり前であるが前出の鉄○の続編。技も増え空中コンボがでやすくなり、「一瞬

のミスが命とりになる世界」に突入している。

発売日前日に Kによって 305にもたらされた (世に言う鉄○ 2伝来 (嘘))。この時

より 305は修羅場と化し、人間がいれば TVには鉄○ 2が、というほとんどゲー

ムセンターの様相を呈している。しかも、そこらのゲーセンよりもレベルが高い

(笑) [→ 親父、鉄○]

てふ [TEX] (固有名詞)  

TSG 部報 No. 199 59

Page 62: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

TSG用語の基礎知識 Ver. 1.0

理科生の基本 (らしいが筆者は使えない)。これをまちがっても TEXだの texだの

と表記してはいけない。また、てっくすだのてえっくすだのと呼んではいけない。

怒り狂った編集長からきっと君の所へ「恐怖の原稿依頼すぺしゃる」が飛ぶはずだ

(大嘘) とにかく編集長が怒ってつっこむので、皆さん気をつけるように (笑)

にんてんどう 64 [任天堂 64] (固有名詞)  

ファミコン及びスーパーファミコンで名を馳せた任天堂が、他社の次世代ゲーム機

に対抗すべく世に送り出すことを画策している機体。何でも、次世代ゲーム機出現

前には 90ち込んでいる (いつぞやの某新聞より)らしい。

しかし、TSGでの評判は至って悪く、筆者もあれは買う気がしないので細かいこ

とは良く知らないのだがあの発売延期の連続はやはりいろいろな問題があるのだ

ろう。どうでもいいが、あの悪趣味なコントローラーは何とかしろ! [→ プレイス

テーション、メガドライブ]

はいじん [廃人] (名詞)  

別に「○したのジョー」の様に真っ白な灰になっているわけではない。猿と同義語

で、「~ヲ」もしくはそのように思われる人間に対して「~廃」とつけて呼称する。

メガ○ラ廃、鉄○廃など。[→ 猿、ヲ]

ぱ○るだま (固有名詞)  

コナミの出した落ちものパズルゲーム。部室に PSのソフトが置いてあるが、○イ

ンビー版に中毒者多数。中には「と○メモだから」という理由でゲーセンでぱず○

だまの○きメモ版に投資している人間さえいる。部室では通常版・ツイ○ビー版を

問わずその音声が「毒電波」として一般人からは忌避される。最近では「進め!対

戦ぱずる○ま」も発売され、部室導入を懸念する声が各方面からあがっている。落

ちもの分科会の 2本柱のうちの 1本。[→ 落ちモノ分科会、ぷよ○よ]

ふくぶちょう [副部長] (名詞)  

部長の次に偉いらしい人。部長の補佐を行うのが主な役目。今年の副部長は他の

サークル (どことはいわないがサークルオリの時に隣にいたサークル (笑)) とかけ

持ちをしていたため、2日目に手伝えとの圧力を受けまくっていたが、彼は副部長

の責任を果たすべく、TSG の領地にとどまり続け……くつろいでいた (爆) しか

し、○長が副部長の貸し出しに同意し、さらに某コン○委員が「1時間 1000円で

貸す」と発言していたのは見逃せないところであろう。

ふくへんしゅうちょう [副編集長] (名詞)  

編集長のお手伝いをする人。今年の副編集長は「背表紙折りの達人」なので非常に

重要な戦力である。でも、結局部報の製本は学館でみんなでやるんだよなあ……

60 TSG 部報 No. 199

Page 63: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

TSG用語の基礎知識 Ver. 1.0

ぶし [部誌] (名詞)  

部室に放置してあるノートのこと。現在は No.78であるが、それ以前のものはあ

まり残っておらず、膨大な量のノートがどこに消えたかは TSGの七不思議のひと

つに数えられている (嘘)

冗談はさておき、このノートは伝言板の役目を果たす。貸し出しノートは別にある

ので部室のものを借りるときにはそれに記入すればよい。但し、私物が置いてある

こともあるので注意すること。

しかし、部誌の真の役割は……そう、マウスパッドなのだ (爆) 部誌が見あたらな

いときはマウスのそばを捜索してみると発見率が高まる (笑)

ぶちょう [部長] (名詞)  

「神聖ニシテ不可侵」である TSGの最高権力者。皇帝。帝王。覇者。王。司法・

立法・行政の三権を独占し、彼に逆らうものには死が待っている……わけがないで

しょ(爆)

部長はいろいろな会議に参加する。いろいろな書類を書く。いろいろなことを仕切

る。とにかく偉いのである。間違っても足を向けて寝てはならない (謎)

今年の部長は……説明会と新歓コンパの挨拶でわかったでしょ?(笑)

ぶほう [部報] (名詞)  

人々が書いた原稿を編集長が真心を込めて編集し、出版するもの。大体 2ヶ月に 1

回くらいは出ているはずである。発行ペースをあげて欲しければ、原稿を書けば良

いのでわかりやすい (笑)

製本には大変な手間がかかるので、編集長が「部報の製本があるよ」と言ったらみ

んな万難を排して駆けつけなければならない。

ぷよ○よ (固有名詞)  

言わずと知れた超有名落ちものパズルゲームでコンパイルの代表作 (TSGに限って

言えばそうではないのだが (爆))。TSGの人々の中にはとてつもなく強い人物が多

数存在する。これらの人々と対戦すると、はっきり言って世界観が変わる。○ずる

だまと併せて落ちもの分科会の双璧なので、興味のある人は落ちもの分科会を覗い

てみると良い。[→ 落ちモノ分科会、ぱ○るだま]

プレイステーション (固有名詞)  

SONYの出したいわゆる次世代ゲーム機。略称プレステ。

部室にあるゲーム機の中ではもっとも高い性能を誇るこの機体は、昨年の 2 年生

の設立した「基金」によって導入され、その後様々なソフトの導入により多くの

TSG 部報 No. 199 61

Page 64: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

TSG用語の基礎知識 Ver. 1.0

廃人を生み出してきた。鉄拳、鉄拳 2、ぱずるだま、リッジレーサー、RRレヴォ

リューションなど、多くの名作 (迷作?)を世に送り出してきた。

年末には FF VII の発売も予定され、一層の普及が見込まれる機体である。[→ 任天堂 64、メガドライブ、その他のソフトの項目]

ぶんかかい [分科会] (名詞)  

一緒に□△を勉強しましょう、という場合に TSGでは□△分科会なる物が設立さ

れる。一般に、教師がいて講義が行われる形を取るが (そんな堅苦しいものではな

いが)、一部には「ただ□△をやるだけ」という無法地帯な分科会も存在する。ど

んな分科会があるかはオリパンフ参照のこと。昔はフラ語分科会やマラソン分科

会、スケボー分科会などもあったらしい。また、地下活動している分科会 (単に公

式でないだけ(^^; )もあるので、興味があったら覗いてみるのもと良いだろう。戻

れなくなっても責任はとらないが (^^; [→ 未公認分科会]

へいあんきょうえいりあん [平安京エイリアン] (固有名詞)  

TSGの偉大な先輩がつくった、その昔ゲーセンで大ヒットしたゲーム。3 05の娯

楽を司る TV・PS・MDの礎として、今もなお 305で TSGer たちを温かく見守っ

ている (嘘)

305に有るものは動作するらしい。筆者は動いているところを見たことはあるが、

やり方は知らない。

昨年、X版を現 3年の GANA氏が移植し、駒場祭で展示を行った。

へんしゅうちょう [編集長] (名詞)  

部報を編集する人。そのまんま (笑)。今年の編集長は TEX廃 (^^; であるが、そ

のおかげで今年もきれいな部報が拝めるのだから感謝の気持ちを忘れてはいけな

い。部報をつくるのは大変なので皆さんいろいろ手伝いましょう。

マイン○イーパー (固有名詞)  

Windowsに付いてくるおまけのソフト。おまけの筈なのだが……一部の人々の間

ではこれは「アクションパズルゲーム」として通っており、それこそコンマ 1秒

の世界でタイムをあらそっていた。圧巻は駒場祭で、TSGが展示に使った全ての

Windowsインストールマシーンのタイムは T氏と Gによって書き換えられ、「旗

無し上等」「ワンボタン常識」というもはや人外魔境の世界に突入していた。

この時、かの有名な格言「すべてのマインは私のもの」が生まれた。[→ 「すべてのマインは私のもの」]

まど [窓] (固有名詞)  

62 TSG 部報 No. 199

Page 65: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

TSG用語の基礎知識 Ver. 1.0

1. Windowsの略称。一般人の前でこう呼ぶと敬遠されかねないので注意 (^^;

ソフ○ップの出している「○ OS」などでは、断じてない!

2. 今年度コンパ委員窓明の名字 (嘘)

みこうにんぶんかかい [未公認分科会] (名詞)  

設立が計画された分科会のうち、日の目を見ることができなかったもの。日の目を

見られなかった理由は様々だが、主に人数の不足・周りの反対によるようだ。ゲー

ム系分科会は一時期こうなる運命だった。今年もなにやら企んでいる人物がいるよ

うだが……(笑) [→ 分科会]

メガドライブ (固有名詞)  

部室にあるもう 1 つのゲーム機 (パソコンもゲーム御法度の Xa/C10 以外はほぼ

ゲーム機なのだが (笑))。通称メガドラ。そのソフトのあやしさには各方面で定評

がある (笑) (^^;

部室のメガドラはつい最近まではぷよぷよ専用機であったが、根津研からのソフト

の大量流入の結果、今では「VR」「ソダン」「バトルマニア」(それぞれが何を指す

のかは部室で確かめよう)などの濃いゲームが蠢いている (笑)

ぷよぷよ専用機次代には TVの横にガムテープで固定され縦置きされるという非

道い待遇であったが、それは横置きになった今も変わらず、電源が足りなくてコン

セントを抜かれるのも、コントローラーを落とされるのも、あまつさえそれを踏

みつけられるのも、みんなメガドラなのである (笑) [→ 任天堂 64、プレイステー

ション]

ライブラリアン (名詞)  

部室のコンピューターの管理及びホームページの管理を行うお仕事。はっきり言っ

て大変である (笑) 今年のライブラリアンは一言で言えば「職人 (笑)」なのである

が、裏や影のライブラリアンの台頭が著しく (笑)、最近は「バ○ーンファイト」に

その生命をかけている (嘘) また、コンパ委員の某とレッズのことで血の抗争を繰

り広げている (大嘘) [→ 裏のライブラリアン、浦和レッズ、影のライブラリアン]

ラ○ナーズ・ハイ (固有名詞)  

これまたコンパイルの出したとんでもないゲーム。とんでもないことを平気でやる

辺りがコンパイルなのであるが、どこをどう考えても 300km/hオーバーで移動し

ている人間がジャンプして水面に着地して無事なわけないし、そもそもコース脇の

柵にぶつかっても無傷 (やっぱり 300km/hオーバーで)なのは「コンパイルに常識

は通用しない」と再認識させられる。

TSG 部報 No. 199 63

Page 66: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

TSG用語の基礎知識 Ver. 1.0

しかし、こんなゲームにはまる人間もいるのである。「せ○だま団」の一部がシフ

トして、今日もまた熱い戦いを繰り広げる。そんなわけで別名「ラン廃」と呼ばれ

るこのゲームは、今日も新たな廃人を作り出そうとしている (嘘) [→ せ○だま団]

りろんかがくぐるーぷ [理論科学グループ] (固有名詞)  

東京大学駒場キャンパス学生会館 305に部室を持つインカレのスタンスをとって

いるサークルのこと。本郷キャンパス付近にも「根津中央研究所」を持つ。東大内

のコンピューターサークルの 2極のうちの 1極。英訳すると「Theoretical Science

Group」で「TSG」になる。

とにかく理論科学なのであるが、いまや理論科学はコンピューター抜きには語れな

い (本当か?)。だからコンピューターである。

しかし、どんな組織にも変わり種はいるもので、TSGには理論科学的に鉄○を研

究する人間やぱ○るだまを研究する人間もいるらしい。

ヲ (名詞)  

言わずと知れた (^^; ヲタク (^^; のこと (^^; [→ 猿、廃人]

筆者註:伏せ字が多くて見にくくて済みません (^^;

この用語集は筆者の独断と偏見に基づいて書かれています。これを読んでいるあなた、

真実は自分の目で確かめましょう。事実無根の記述はないとは思いますが、万一あった

場合はお知らせ下さい。

また、あくまで「TSG用語」ですので第 3者に対して用いて通用しなくとも、または

それが原因で人間関係に支障を来しても筆者の関知するところではありません。

2年生以上の人は読んでも余り面白くないかも知れませんね (^^; あくまで新入部員

の人向けということで (^^;

written by ZERO

64 TSG 部報 No. 199

Page 67: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

編集後記

眠い(笑)

今年は自己紹介文が全体に短くなってしまいましたね。

原稿が 6本も落ちてしまいました (^^;; にも関わらずなんか分厚い。集まっ

ていたら本当に 100 ページいったかもしれない。去年は確か 80ページだっ

たんだよね。(過去最高記録)

次はついに 200 号です。投稿お待ちしてます。

オリの舞台裏に関する記事は、この分厚さと関連記事が落ちたことのため次

号にまわします。折角書いてもらったのにすまん>みやもと

理論科学グループ 部報 199号

1996年 5月 18日 発行

1998年 7月 25日  pdf 版用修正 2版

2009年 4月 15日  pdf 版用修正 3版

発行者 金子 済

編集者 大岩 寛

発行所 理論科学グループ

〒 153 東京都目黒区駒場 3–8–1

東京大学教養学部内学生会館 305

Telephone: 03–5454–4343

(C) Theoretical Science Group, University of Tokyo, 1996.

All rights are reserved.

Printed in Japan.

Page 68: Theoretical Science Group 理論科学グループweb.yl.is.s.u-tokyo.ac.jp/~oiwa/tsg/buho/199.pdf · 使って何かをする(LaTEX でレポートを書く等など) 程度です。つまり、「作る」立場か

理論科学グループ部報 第 199号

— 新入生歓迎号 —

1996年 5月 18日

T HEORET ICAL SCIENCE GROUP