何が何ですか? · bei.pm
このセクションには、ファイル形式やリバースエンジニアリングに関する記事があります。
しかし、実際にはこうです:
世の中には多くのプログラミング言語があり、さまざまな人々が異なる名前で物事を知っていたり、そもそも基本的なことの存在すら知らなかったりします。なぜなら、彼らのプログラミング言語がそれを彼らから抽象化しているからです。
要点:
私の表記はおおよそC99 <stdint.h>
に基づいています。この表記に慣れている人は、私の表記にも問題なく対応できるでしょう。
整数
整数とは、簡単に言うと小数点を持たない整数のことです。
整数は、データフォーマットの中で通常、固定の数の範囲、つまり解像度の中で定義されます。これをビットで表します。理由は、「バイト」やそれに基づくタイプ(ワード、クワードなど)が通常プラットフォームに依存するからです。
さらに、整数のタイプには 自然数 (ℕ、つまり符号なし - Unsigned) と 整数 (ℤ、つまり符号あり - Signed) の違いがあります。
この情報は、識別子の符号(u
または s
)で表示されます。
符号付き整数は、一の補数として表現されるか、または 二の補数として表現される可能性があります。
特に指定がない限り、二の補数が使用されます。これは現代のコンピュータ科学で好まれる表現です。
符号なし整数は、私の文書では uint
として示され、その後に ビット での精度が記載されます。
符号付き整数は、私の文書では sint
として示され、同様に ビット での精度が記載されます。
私は文字を表すために「char」データ型の使用を避けます。なぜなら、文字列は通常、特別な解釈を持つ整数値の列を表すからです。
これらはしたがって uint(8)[] として表されます。
例:
表記 | C99 stdint.h における等価 |
説明 | 数値範囲 |
---|---|---|---|
uint(16) | uint16_t | 符号なし整数、16ビットの長さ | 0 - 65,535 |
sint(8) | int8_t | 符号付き整数、8ビットの長さ、2の補数 | -126 - 127 |
uint(24) | uint32_t:24 | 符号なし整数、24ビットの長さ | 0 - 16,777,216 |
固定小数点値
固定小数点値は、有理数(Q)の範囲にある数値であり、小数点および小数桁を持っています。
固定小数点値は、その名の通り、データ型によって小数点の位置が固定されています。
したがって、このデータ型の数値には固定された範囲があり、数学的には数値空間は有限です。
実際には、このデータ型は、十分に速い浮動小数点演算ユニットがないプラットフォームで主に使用されます。固定小数点値の計算は整数ユニットで行うことができます。
また、データベース管理システムなどでは、固定された要求を満たす必要がある場合にこのデータ型が使用されます。
たとえば、金融データの永続的な保存のためのシステムを考えてみてください。ほとんどの通貨は小数点以下2桁に制限されています。
(ただし、固定小数点値を使用するのは賢明ではありません。代わりに、最小通貨単位を整数として保存し、残りの表示レベルを任せる方が賢いです)
整数の指定と同様に、固定小数点値に対しては小数点の前後の数値の解像度を指定します:
ufixed(9,7)
は、小数点の前に符号なしで9ビット、後に7ビットの値を予約するデータ型を示します。したがって、合計で16ビットの幅があり、たとえば独立した2つの整数のベクトルとして(0,0)から(511,127)までの範囲をカバーできます。
ただし、この解釈では小数表現において28の数字を無駄にしてしまいます。おそらく実際には最大(511,99)まで制限されるでしょう。
固定小数点値を2つの独立した整数のベクトルとして直接的に解釈するのではなく、代わりに小数点以下の範囲を分数として全体の解像度で解釈することもできます。
前述のufixed(9,7)
の例を考えると、分母は27になります。したがって、数値範囲は0.00から511 + 126⁄127までとなります。
小数表現に変換するためには、小数点以下の桁を128で割る必要があります。
この方法では、計算操作が簡単に行えるため、キャリーが自動的に発生し、この方式は通常好まれます。
ただし、この方式には欠点があり、小数表現の小数桁には保証された解像度がなくなります。つまり、単一の小数桁は0.01
ではなく0.007874
の価値を持ち、これが丸め誤差を引き起こすことになります。
どの解釈方法が使用されるかは、使用場所に文書化されます。
浮動小数点値
符号 (0 または 1 ) |
指数 | 仮数 |
符号はバイナリのはい/いいえ情報として簡単に取得できますが、実際の数値は次の式で形成されます。
仮数 * 2指数
さらに、特別なケースの定数値があり、有理数をカバーしています。その中には±∞
やNaN
("無効な数")があります。
浮動小数点数は、精度がそれほど重要でないときに特に便利です。この種類の値では必然的に丸め誤差が生じ、精度が失われるためです。一般的に、浮動小数点数は、3Dモデルの頂点ベクトルや光学的表現のためのベジェ/スプライン曲線などの座標の定義に使用されます。
データフォーマットでは、浮動小数点数はfloat(仮数, 指数)
として指定されます。
IEEE 754から外れる形式が使用される場合は、それについて明記されます。