クエリ: コンピュータが主に使用する、数字を0と1の2種類のみで表わす方法のことを何というでしょう?
文章: 数 (こうして1960年代~1980年代は、コンピュータを実際に操作する場面で、さかんに十六進表記のデータ群やプログラムが使われた。最近は、システム開発の焦点となる次元(アーキテクチャ内での階層)が変わり、コンピュータ・エンジニアが十六進表記の記述を扱うことはかなり減ったが)、デジタルコンピュータは今も、二進法を根本原理として、物理的に動いており、それに支配されている。これらのことから現在でも、コンピュータのエンジニアの資格試験では二進法・十六進法・十進法などの間の相互変換は(コンピュータの根本原理を理解するためにも、それを扱うために開発された技術的手法の歴史を理解する上でも)必修事項となっており、コンピュータ・エンジニアの資格取得者ならばそれらの相互変換ができる。なお、ある数を記述するための記数法が指定されても、それでも表示がひとつに定まらないことがある。
文章: キャレット記法 キャレット記法(キャレットきほう、英語: caret notation)とは、表示できない文字であるASCIIの制御文字を、表示できる文字だけで書き表すための方法である。 使用するのはキャレット (^) と大文字のアルファベット(基本ラテン文字)である。アルファベットの先頭(A)から1, 2, 3, ..., 26と番号を振り、それぞれの制御文字のASCIIにおける値を持つアルファベットを使用する。例えば、テキスト終結(ETX)のASCIIでの値は3なので、アルファベットで3文字目の C を使って ^C と表す。ヌル文字(NUL)のASCIIでの値は0で対応するアルファベットがないので、ASCIIでAの1つ前にある @ を使って ^@ と表す。削除文字(DEL)のASCIIでの値は127で対応するアルファベットがないが、通常は ^? と表す。これは、ASCIIで ? が @ の1つ前でこれを「アルファベットの-1番目」とみなし、-1を8ビットの2の補数を使用して表したもの(二進数で11111111)を7ビットでマスクすると127になるからである。 多くのコンピュータシステムでは、コントロールキーとともにキャレット記法で使われるアルファベットを押すと、対応する制御文字を発生するようになっている。これは、ほとんどの制御文字をキーボードで直接入力することができないためである。制御文字を表す方法は他にもあるが、この仕様があるため、キャレット記法が最もよく使われる。 文章: アンパック10進数 アンパック10進数(英: unpacked BCD)とは、数値をコンピュータ上で表現する手法の一つで、BCDをベースに定義されている。ゾーン10進数とも呼ぶ。パック10進数の登場により、「パック」ではないという意味で「アンパック」と呼ばれるようになったものと推測される。10進数の1桁を、4桁のゾーンビットと4桁の数値ビットとに分けて表現する。数値の最後の桁はゾーンビットではなく正の数か負の数かを判断するための符号ビットが割り当てられる。なお、ゾーンビットは、EBCDICでは15、JIS8コードでは3を、符号ビットは、IBM互換のメインフレームでは正の数に12、負の数に13が割り当てられている。符号部についてはCOBOLベンダ各社で相違があるため、非常に互換性が低い。 文章: 常平通宝 1778年から新常平の小平銭(1枚1文)もやはり大量に鋳造され、広く流通した。この小平銭の裏面には膨大な種類があり、発行所を表わす文字、漢数字(小平銭では基本的に一から十まであるが、一部では十を超えるものも見られる)、千字文その他の漢字(記されていないものも多い)及び記号のようなものの組み合わせとなっている。一説では1万以上の種類が存在するとされているが、現存するものはそのうち恐らく6~7千種類と思われる。 常平通宝の小平銭は「葉銭」とも呼ばれる。 1866年には、時の権力者興宣大院君が財政難を打開し景福宮再建のための資金を調達することを目的に常平通宝の当百銭(百文銭)を鋳造した。裏面には「戸大當百」とある(「戸」は発行所を表わす)。しかし重量は小平銭の5~6倍に過ぎず、実際には100文では通用しなかったようである。そして財政難を打開するどころか物価上昇、大院君の執権体制の危機といった問題をもたらし、鋳造開始の2年後に当百銭は通用停止・回収されてしまった。 文章: コンピュータの数値表現 符号付きの数値の表現法はいくつか存在する。必ずしも「符号ビット」があるとは限らない。例えば、ゲタ履き表現では、ゲタの値によっては「符号ビット」としては扱えない。符号ビットがある場合は、最上位ビットが符号ビットのことが多い。なお、符号ビットについて「1なら負の数を表し、0なら正の数を表す」といったように考えるのが自然なのは「符号と絶対値」表現の場合だけであり、たとえば「2の補数」表現であれば、最上位ビットは -(2) の重みを持つ桁である、と解するのが自然である。 「符号と絶対値」表現は、1ビットの符号ビットと、絶対値を表す残りのビット群からなる。例えば、4ビットの場合で、MSBの、0が正、1が負を示すものとすると、 となる。浮動小数点数はたいていがこのような形をしている。ただし、絶対値の部分が指数部と仮数部に分かれている。 文章: Hexspeak Hexspeakとは、リートスピークと類似の、英語の変わった表記法の一種である。 プログラマは、メモリやデータに「未使用」や「異常データ」といった印をつけるために分かりやすいマジックナンバーを必要としており、この際にHexspeakが作り出された。数字の"0"をアルファベットの"O"に、数字の"1"をアルファベットの"I"に、数字の"5"をアルファベットの"S"に読み替えるといった方法を利用し、16進数の表記に使われる文字 (0123456789ABCDEF) しか使えない条件下で短い単語を表現している。 文章: 5者択2符号 5者択2符号(ごしゃたくにふごう、two out of five code)は、5ビットで0から9の十通りを表す符号である。 5 C 2 = 10 {\displaystyle _{5}{\rm {C}}_{2}=10} により、3個の0と2個の1(あるいは、2個の0と3個の1)の並べ方の場合の数は10である、ということを利用している。 アメリカ連邦規格1037Cでは、0-1-2-3-6の重みを付け、0は01100としてコード化された。 IBM 7070、IBM 7072、IBM 7074では、0-1-2-3-4のビット位置に対応し、連邦規格と同様の重み付けがされ、十進数の他に3者択2符号においてA、+、-を0-3-4のビット位置に対応させた。 アメリカ合衆国郵便公社で使用されているPOSTNETでは、7-4-2-1-0の重みを付け、0は11000としてコード化された。この方法は、北米電話のクロスバースイッチシステムでも使用されていた。 誤り検出方法として、「1」の個数が常に2個か否かを検査することによって誤りを検出する方法がある。 文章: 符号付数値表現 この数値表現体系は古いコンピュータでは一般的だった。PDP-1とかUNIVAC 1100/2200 seriesなど多くのシステムが1の補数を使っていた。 なお、「1の補数」表現とは、英語では "ones' complement" 、すなわちoneの複数形onesの所有格であり、「2の補数」が "two's complement"、すなわちtwoの単数形の所有格であるのと異なる。これは、1の補数が実際には 1 がずらっと並んだものから元の数を引くことで符号を反転させるためである。2の補数では単一の2のべき乗から元の数を引いて符号を反転させる。 IPv4のヘッダーチェックサムは1の補数を使っている。 文章: MIX (プログラミング) この数は「MIX によく似ていて MIX を簡単にシミュレートできる実在のコンピュータ 16 種」の型番から取って平均した(mixした)ものであるとあるが、具体的にその機種を検討してみるとかなり恣意的であり、このラインナップについてはこじつけと見てよいであろう。 文章: ブーリアン型 COMのステータスコードとして使われる32ビット整数のHRESULT型は、ゼロを成功(S_OK)、正数を準成功(S_FALSE: 失敗ではないが否定的な状態)、負数を失敗(E_FAILなど)、とみなす。成否の判定のためにSUCCEEDED()/FAILED()マクロが用意されている。C11で標準化されたerrno_t型はゼロを正常(エラーなし)とみなす。また、比較などで「小なり」「等しい」「大なり」の3通りの意味を返したい、といった場合には、負の値・ゼロ・正の値、とするのが自然であるため、たとえば代表例の strcmp() 関数では、文字列が等しいということを示すためにゼロが返される。なお、単に「文字列が等しいか?」という比較をする場合などに、以下のように論理否定演算子! 文章: -0 コンピュータにおける負の値の扱い方にはいろいろあるが、IEEE 754 が採用しているような「符号と絶対値」方式による表現では、ゼロについて、 の二種類の表現が可能であるため、問題が生じることがある。なお21世紀にはほとんど見られなくなったがかつては、整数の表現についても「符号と絶対値」方式が採用されることもあった。 例えば、IEEE 754 では、x == y といったような通常の比較において、通常のゼロと負のゼロを比較した場合、真になることを要求している。単にワードを整数と同様に比較しただけでは、その要求を満たすことができない。もっとも、IEEE 754 ではたとえば NaN についても同様に例外的な扱いが必要なので ( NaN == NaN は常に偽で NaN != NaN は常に真) 、実装上、負のゼロがきわめて特異というわけでもない(IEEE 754 では)。 文章: 十六進法 読み方は十進表記の1000((いっ)せん)と区別するため、文字並びのまま読む(例えば、0x1000 は「ぜろ・エックス・いち・ぜろ・ぜろ・ぜろ」と読む)。慣用では「ヘキサの千」もしくは「千ヘキサ」と言った読み方も行われている。 上記の数字に付く h や x は英語で十六進法を意味する hexadecimal から取ったものである。十六進表記であることを明示している。 A - F の文字を用いて 9 以上の数字を表現する方法はコンピューター黎明期にはまだ一般的ではなかった。 文章: 十六進法 コンピュータでは、データをビットやオクテットを単位として表すことが多い。それぞれ二進表記の1桁、8桁で表現できる。 使える数は、前者は0と1だけが許されるが、後者は0~255までに広がる。 後者には、十六進表記がよく用いられ、二進表記の4桁が1桁で表現できるので、二進表記より短く表すことができる。1オクテットは、2桁の十六進表記で表現することができる。 十六進表記の1桁はニブルとも呼ばれる。 文章: 自然数 自然数は「ものを数える言葉」を起源とし、1 から始まる正の数であったと推定されている。文明が起こり、数字が考え出されたとき、ローマ数字、ギリシア数字、エジプト数字、バビロニア数字、マヤ数字、漢数字、等のどれもが1から始まる正の数字であった。つまり、「物がある」という概念を量的に表そうとしたのが数であり、「物がない」という概念は「無い」という言葉で充分だった。 最初の大きな進歩は、数を表すための記数法の発明であり、これで大きな数を記録することが出来るようになった。古代エジプト人は 1 から百万までの 10 の累乗それぞれに異なるヒエログリフを割り当てる記数法を用いていた。バビロニアでは、数字を離して表記することでその桁が 0 であることを示す六十進法の位取り記数法に似た方法が開発された。しかし、0 を表す文字がなかったため、例えば 10203 は 0 を空白にして "1 2 3" と正しく表記できるが、10200 は "1 2" となって 102 と区別できない欠点があった。オルメカとマヤの文明では紀元前1世紀までには、数字を離して 0 の桁を表す方法が独立に用いられていた。 抽象的な概念としての数の体系的な最初の研究は、古代ギリシアにおいてなされ、数論が高度にまで発達した。古代ギリシアの数学者エウクレイデスが編纂した『原論』の第7巻の冒頭で数の定義がなされている。 文章: ゼロサプレス ゼロサプレスまたはゼロ抑制 (英: zero suppress, zero suppression) は、数の表記から冗長なゼロを除去することである。逆の処理を行う対義語はゼロパディングである。(特に必要な場合を除いて)位取りに必要なゼロや有効数字にかかわるゼロは除去しない。 文章: フィッシャーイェーツのシャッフル 右の図は長さ7の配列をシャッフルしたときに、最終的にどの位置に移動したかを表したものである。ほぼすべての要素において、最終的にもとの位置がもっとも確率が低く、ひとつ後ろの位置がもっとも確率が高くなっている。長さ1000の配列の図も同様に示す。 フィッシャーイェーツのシャッフルでは、一様分布であるランダムな整数を、様々な範囲から取得することが要求される。しかし、ほとんどの乱数生成器においては、それが真の乱数であれ、疑似乱数であれ、決まった範囲からの乱数を提供する。例えば 0 から 2 - 1 までの範囲などである。生成機より得られる乱数を取得したい範囲に絞るための、シンプルかつ一般的な生成方法は、剰余演算を用いる方法である。これは取得した乱数を範囲の大きさで除算し、その余りを取得する。フィッシャーイェーツのシャッフルにおいては 01 から 0n までの、全ての範囲で等しく乱数を取得することが求められるが、剰余によって求められる乱数は公平に分布せず、余りが小さい方への偏向が生じる場合がある。 例えば、生成器による乱数が、0から99までの範囲で生成される場合を考えよう。このような乱数の取得方法は、乱数表を使用する場合などである。そして今、0から15までの範囲で乱数を取得したいこととする。単純に16で割った余りを使用する場合、0から3までの数字が取得される確率は、他の数字と比べて約17%上昇する。なぜならば、100は16で割り切れないためである。100までの数字の中で、16で割り切れる最大の数字は 6×16 = 96 であり、生成された乱数が96から99となった場合に偏りが生じるのである。この問題を回避する単純な方法は、そのような偏りの生じる数値が生成された場合はその結果を破棄し、適合する範囲の数値が取得できるまで繰り返すことである。最悪のケースを考えれば、永遠に生成と破棄を繰り返す可能性は存在するが、繰り返しの期待回数は1よりも小さくなる。