このページは大阪弁化フィルタによって翻訳生成されたんですわ。 |
コンピュータ上では、ずぅぇえええぇぇええんぶがビット列として保存されとることは 御存知や思うで(二進数ちうんは、一連の小さなオン・ オフのスイッチと考えることができまんねん)。 ここでは、そないなビットによって、コンピュータ上で扱われる 文字や数字がどないな風に表されとるんかを説明しまっせ。
説明に入る前に、まずコンピュータのワードサイズ (word size) について 理解する必要がおます。ワードサイズとは、そのコンピュータ上で利用されて おる、情報をやり取りするための単位のことや。技術的にぬかすと、こら プロセッサのレジスタ (registers) の幅のことなんやし、レジスタとは、プロセッサ が計算や論理演算を行う際にその情報を格納する場所や。コンピュータには ビットサイズがあると書かれとる場合 (例あげたろか、たとえばやなあ、それらを 32-bit や 64-bit コンピュータやらなんやらと呼んどる場合)、そらコンピュータのワードサイズのこと をぬかしておるわけや。
(386 や 486 および Pentium PC を含む) 大部分のコンピュータは、32 bit の ワードサイズとなっとりまんねん。古くさい 286 のマシンは、16 ビットのワードサイズ やった。旧式のメインフレームやと 36 bit ワードのもんがようおます。 いくつかのプロセッサでは (例あげたろか、たとえばやなあ、旧 DEC 現 Compaq が出してん Alpha やらなんやらは)、64 ビットのワードサイズとなっとりまんねん。64 bit ワードは、これから 5 年 ほどの間には、もっともっともっともっともっともっともっともっともっと一般的なもんになるでっしゃろ。Intel は、Pentium シリーズ のチップを "Itanium" と呼ばれる 64 bit チップに置き換えよう計画してんねんさかい や。
コンピュータは、メモリを、ゼロからそのマシンのメモリサイズの上限に該当する 値までの番号を振った、一連のワードの並びとして見とりまんねん。このメモリサイズの 上限の値ちうんは、ワードサイズによって決まるんや。286 やらなんやらの 旧式のマシン用のプログラムが大容量メモリを管理するんに、ごっつう無理なこじつけ を使わなならへんんはそのためや。ここではそないな こじつけの仕組みについては述べしまへんが、年輩のプログラマは、いまんなってもこれが 原因でうなされとったりしまっせ。
整数は、プロセッサのワードサイズに応じて、ワードか、もしくはワードのペア によって表現されとりまんねん。32 bit マシンでは、ワードが最も基本的な整数の 表現単位となっとりまんねん。
整数の計算は、二進数の計算と似とりますが、実際はちびっと異なるんですわ。 純粋な二進数では、下位ビットから順に 1, 次に 2, ほんで 4 等を 表しまんねんけど、正負の符合付き数字は、2 の補数 (twos-complement) ちう表記で表されはります。最上位ビットは、符合ビット (sign bit) なんやし、このビットを使うて負の値がつくられはります。ほんで、負の数字はずぅぇえええぇぇええんぶ 、正の数字のビットをぜええんぶひとつのこらず逆転させて、それに 1 を加えることで変換可能や。 32 bit マシン上で整数の値の幅が、-2^31 から 2^31 -1 (ここで、^ の 記号は、べき数の演算子を表し、2^3 = 8 や) までしかいないんは、そのため や。32 bit 目のビットは、正負符合用に使われるちうワケや。
コンピュータ言語のなかには、符合なし演算 (unsigned arithmetic) ができるもんもおます。その場合は、ゼロと正の数だけをつこうた 通常の二進数演算となるんですわ。
大部分のプロセッサやコンピュータ言語のいくつかは、浮動小数点 (floating-point) 数での処理が可能や(この機能は、きょうびの(PC 用)プロセッサ チップやったら、ずぅぇえええぇぇええんぶに組み込まれとります)。浮動小数点数を使うと、整数よりも 広い範囲の値を扱うことができるだけでなく、分数も表現できるように なるんですわ。浮動小数点計算を実現する方法は、様々な種類がおますし、 ここで解説するにはちーとばかし複雑すぎるちうワケやが、大まかにぬかすと、 なんちうか、ようみなはんいわはるとこの「科学的な表記法」といわれるもん、すなわち 1.234 * 10^23 のような 表記法とどエライよう似とりまんねん。数字をコーディングする際は、 仮数 (mantissa) (すなわち 1.234) と、10 のベキ数としての指数部分 (すなわち 23) とに分離されはります。(ゴチャゴチャゆうとる場合やあれへん、要は、ここでの仮数は、小数点以下に 3 桁あるんで、 この場合の計算結果は、その数字のあとに 0 が 20 個付くわけや。)
文字は、通常、ASCII (American Standard Code for Information Interchange) と呼ばれるコーディングにしたがった 7 bit の並びとして表現されはります。 現在のマシンでは、128 個の ASCII 文字のそれぞれが、オクテット (octet) もしくは 8-bit のバイト (byte) の下位 7 bit を使うて表されとりまんねん。オクテットは、 メモリのワード単位にまとめられはるさかい、例あげたろか、たとえばやなあ 6 字の文字列の場合、 ようけとも 2 メモリワード分の場所しか取らしまへん。この ASCII 文字のコード表を 見るには、Unix プロンプト上で `man 7 ascii' と打っておくんなはれ。
とはいえ、上記の段落は、ふたつの点で誤解を招くかもしれしまへん。いっちゃんはじめに、 ひとつ目は、やや細かいことやけど、そやけどアンタ、オクテットちう用語や。 こら、正式には間ちごてはいまへんが、実際にはほとんど使われてへんねん。 大部分の人は、オクテットを バイト(byte) と呼び、バイトを 8 bit 長であると考えとりまんねん。厳密にいうと、バイトと いう用語は、もっともっともっともっともっともっともっともっともっと一般的な意味を持っとりまんねん。例あげたろか、たとえばやなあ、よりどエライ昔は 36-bit マシンで 9-bit バイトといった言い方もなされとったのや(もうこないな使い方は決して なされんとは思うのやけど)。
ふたつ目のより重要な問題は、 全世界で ASCII 文字が使われとるわけではおまへんちうことや。 事実、ようけの国では、ASCII を使うていまへん。ASCII は、アメリカ毛唐のセリフの場合には 問題ありまへんのやが、他の言語の利用者が必要とするアクセント付きの文字や特殊な 記号の付いた文字のようけが欠落してんねんさかいや。英国毛唐のセリフやら、ポンド記号 が欠けとることから、ASCII 文字では問題が生じてまうのや。
この問題を解決したろとおもう試みは、過去にいくつもなされてきましたのや。 それらはずぅぇえええぇぇええんぶ、ASCII では使われておらへん最上位 bit を使うゆう もんなんやし、それによって 256 文字セットをもうひとつ作ってしまおう ゆうものや、それらのうち、もっとも広く利用されとるのが Latin-1 と呼ばれるもんや(正式には、ISO 8859-1 と呼ばれとります)。こら、 Linux, HTML および X でのデフォルトの文字セットとなっとりまんねん。 Microsoft Windows は、Latin-1 に手を加え、正式な Latin-1 では 歴史的な理由から空欄とされとる箇所に左翼右翼の二重引用記号やらなんやらを 追加してるんや。(これが、トラブルを引き起こす原因になっとる ちう事件の解説は、demoroniser のページを御覧おくんなはれ。)
Latin-1 は、毛唐のセリフ、フランス語、ドイツ語、スペイン語、イタリア語、オランダ語、 ノルウェー語、スウェーデン語、デンマーク語といった西ヨーロッパの言語を 扱うもんや。せやけどダンさん、Latin-1 は、どれひとつの言語においても満足のゆく出来 ではおまへんために、その結果として、Latin-2 から Latin-9 までの一連の文字セット が生まれ、これらを使うて、ギリシャ語、アラビア語、ヘブライ語、エスペラント語、 セルビア・クロアチア語やらなんやらも扱っとりまんねん。ねちっこくは、ISO alphabet soup のページを御覧おくんなはれ。
究極の解決策が、Unicode (および、その双子の兄弟である ISO/IEC 10646-1:1993) と呼ばれる膨大な標準規格や。Unicode は、冒頭の 256 箇所については Latin-1 とまるっきし同じや。それ以降の 16 bit 空間には、ギリシャ、キリル、アルメニア、 ヘブライ、アラビア、デヴァナーガリー(訳注:サンスクリット・ヒンディーその他を 含む現代インド諸語)、ベンガル、グルムキー(訳注:パンジャブ地方の文字)、 グジャラート、オーリヤ(訳注:インドの Orissa 州)、 タミル、トゥルグ、カンナダ(訳注:インドの Mysore 州)、マラヤーナム(訳注: インド南西)、タイ、ラオス、グルジア、チベット、 やまと仮名、現代韓国のハングル完全版、中国・やまと・韓国の表意文字 (漢字) の 統一セットといった文字コードが含まれとりまんねん。ねちっこくは、 Unicode ホームページ を御覧おくんなはれ。