とほほの数値フォーマット入門

トップ > 数値フォーマット

目次

数値フォーマットとは

整数

-2, -1, 0, 1, 2, ... など小数点を持たない数を 整数(integer)と呼びます。プラスマイナスの符号を持たない 符号なし整数(unsigned integer) と 符号を持つ 符号付き整数(signed integer) に分類されます。

8ビット整数(符号なし)

8ビットで 0~255 の数値を表します。

00000000 : 0
00000001 : 1
00000010 : 2
11111111 : 255
8ビット整数(符号付き)

先頭の1ビットで符号(0は正数、1は負数)を、残りの7ビットで絶対値を表します。負数の場合は2の補数で表します。-127~128 の数値を表現できます。

0|0000000 : 0
0|0000001 : 1
0|0000010 : 2
0|1111111 : 127
1|1111111 : -1
1|1111110 : -2
1|0000000 : -128
16ビット整数(符号なし)

16ビットで 0~65535 の数値を表します。

00000000 00000000 : 0
00000000 00000001 : 1
00000000 00000010 : 2
11111111 11111111 : 65535
16ビット整数(符号付き)

先頭の1ビットで符号(0は正数、1は負数)を、残りの15ビットで絶対値を表します。負数の場合は2の補数で表します。-32768~32767 の数値を表現できます。

0|0000000 00000000 : 0
0|0000000 00000001 : 1
0|0000000 00000010 : 2
0|1111111 11111111 : 32767
1|1111111 11111111 : -1
1|1111111 11111110 : -2
1|0000000 00000000 : -32768
32ビット整数(符号なし)

32ビットで 0~4,294,967,295 (約43億)の数値を表します。

00000000 00000000 00000000 00000000 : 0
00000000 00000000 00000000 00000001 : 1
00000000 00000000 00000000 00000010 : 2
11111111 11111111 11111111 11111111 : 4,294,967,295
32ビット整数(符号付き)

先頭の1ビットで符号(0は正数、1は負数)を、残りの31ビットで絶対値を表します。負数の場合は2の補数で表します。−2,147,483,648~2,147,483,647 の数値を表現できます。

0|0000000 00000000 00000000 00000000 : 0
0|0000000 00000000 00000000 00000001 : 1
0|0000000 00000000 00000000 00000010 : 2
0|1111111 11111111 11111111 11111111 : 2,147,483,647
1|1111111 11111111 11111111 11111111 : -1
1|1111111 11111111 11111111 11111110 : -2
1|0000000 00000000 00000000 00000000 : -2,147,483,648
64ビット整数(符号なし)

64ビットで 0~18,446,744,073,709,551,615 の数値を表します。

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 : 0
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001 : 1
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000010 : 2
11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 : +18,446,744,073,709,551,615
64ビット整数(符号付き)

先頭の1ビットで符号(0は正数、1は負数)を、残りの63ビットで絶対値を表します。負数の場合は2の補数で表します。−9,223,372,036,854,775,808~9,223,372,036,854,775,807 の数値を表現できます。

0|0000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 : 0
0|0000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001 : 1
0|0000000 00000000 00000000 00000000 00000000 00000000 00000000 00000010 : 2
0|1111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 : 9,223,372,036,854,775,807
1|1111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 : -1
1|1111111 11111111 11111111 11111111 11111111 11111111 11111111 11111110 : -2
1|0000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 : -9,223,372,036,854,775,808

浮動小数点数

1.23 や 1.23×103 など、小数を含む数値を 浮動小数点数(floating point number)と呼びます。1.23×103 の場合、1.23 を仮数、3乗を指数と呼びます。浮動小数点数をメモリ上にどのように配置するかの仕様はいくつかの形式がありますがほとんどの実装は IEEE 754 形式に従っています。1ビットの符号、数ビットの指数部、数ビットの仮数部から構成されます。

単精度浮動小数点数

符号1ビット+指数8ビット+仮数23ビット=32ビットに格納します。指数は127を加えた値とします。仮数は2進数で1.110011 の場合先頭の 1. を省略して 110011 と表します。0.0 は特別に All 0 で表します。

0|0000000 0|0000000 00000000 00000000 : 0.0(10進)
0|0111111 1|0000000 00000000 00000000 : 1.0×100(10進) = 1.0×20(2進)
0|0111111 1|1000000 00000000 00000000 : 1.5×100(10進) = 1.1×20(2進)
0|0111111 1|1100000 00000000 00000000 : 1.75×100(10進) = 1.11×20(2進)
0|0111111 1|1110000 00000000 00000000 : 1.875×100(10進) = 1.111×20(2進)
1|0111111 1|1110000 00000000 00000000 : -1.875×100(10進) = -1.111×20(2進)
0|1000100 1|0011001 11000000 00000000 : 1.23×103(10進) = 1.00110111×210(2進)

指数部の All 1 は無限大や NaN を意味します。

0|1111111 1|0000000 00000000 00000000 : 無限大
0|1111111 1|(Any value other than 0)  : NaN

最大値・最小値は下記となります。

0|1111111 0|1111111 11111111 11111111 : +3.4028235E+38(最大値)
1|1111111 0|1111111 11111111 11111111 : -3.4028235E+38(最小値)
0|0000000 0|0000000 00000000 00000001 : +1.401298E-45(正の最小桁数)
1|0000000 0|0000000 00000000 00000001 : -1.401298E-45(負の最小桁数)
倍精度浮動小数点数

符号1ビット+指数11ビット+仮数52ビット=64ビットに格納します。指数は1023を加えた値とします。仮数は2進数で1.110011 の場合先頭の 1. を省略して 110011 と表します。0.0 は特別に All 0 で表します。

0|0000000 0000|0000 00000000 00000000 00000000 00000000 00000000 00000000 : 0.0
0|0111111 1111|0000 00000000 00000000 00000000 00000000 00000000 00000000 : 1.0×100(10進) = 1.0×20(2進)
0|0111111 1111|1000 00000000 00000000 00000000 00000000 00000000 00000000 : 1.5×100(10進) = 1.1×20(2進)
0|0111111 1111|1100 00000000 00000000 00000000 00000000 00000000 00000000 : 1.75×100(10進) = 1.11×20(2進)
0|0111111 1111|1110 00000000 00000000 00000000 00000000 00000000 00000000 : 1.875×100(10進) = 1.111×20(2進)
1|0111111 1111|1110 00000000 00000000 00000000 00000000 00000000 00000000 : -1.875×100(10進) = -1.111×20(2進)
0|1000000 1001|0011 00111000 00000000 00000000 00000000 00000000 00000000 : 1.23×103(10進) = 1.001100111×210(2進)

指数部の All 1 は無限大または NaN を意味します。

0|1111111 1111|0000 00000000 00000000 00000000 00000000 00000000 00000000 : 無限大
0|1111111 1111|(Any value other than 0)                                   : NaN

最大値・最小値は下記となります。

0|1111111 1110|1111 11111111 11111111 11111111 11111111 11111111 11111111 : +1.7976931348623157e308
1|1111111 1110|1111 11111111 11111111 11111111 11111111 11111111 11111111 : -1.7976931348623157e308
0|0000000 0000|0000 00000000 00000000 00000000 00000000 00000000 00000001 : +4.94066e-324
1|0000000 0000|0000 00000000 00000000 00000000 00000000 00000000 00000001 : -4.94066e-324

バイトオーダー

例えば整数の 255 を 16ビット符号無し整数で表すと 00000000 11111111 となります。この時、メモリの番地の若い順に 00000000 11111111 と格納する方式を ビッグエンディアン と呼びます。逆に 11111111 00000000 の様に逆順に格納する方式を リトルエンディアン と呼びます。このバイトの並びのことを バイトオーダー と呼びます。バイトオーダーは多くの場合 CPU の種別によって決まります。現在の Windows PC で一般的に用いられている Intel 系の CPU ではリトルエンディアンが、MC68000 などの Motorola 系や Apple の M2 等ではビッグエンディアンが採用されています。


Copyright (C) 2023 杜甫々
初版:2023年11月5日 最終更新:2023年11月5日
http://www.tohoho-web.com/ex/numerical-format.html