GSOF消息:读取二进制值(Motorola格式)
接收机以Motorola格式存储数字。这些数字的字节顺序与个人电脑(Intel格式)的预期相反。为了提供或解释二进制数字(8字节的DOUBLES双数、4字节的LONGS长数和2字节的INTEGERS整数),这些值的字节顺序必须颠倒。这部分包含对Motorola格式的详细说明。
INTEGER整数数据类型
INTEGER整数数据类型(CHAR、SHORT和LONG)可以带符号,也可以不带符号。默认情况下,它们不带符号。所有整数数据类型都用二进制补码表示。下表列出了整数数据类型:
| 类型 | 位数 | 值的范围(带符号) | 不带符号 |
|---|---|---|---|
| 字符 | 8 | -128至127 | 0至255 |
| 短 | 16 | -32768至32767 | 0至65535 |
| 长 | 32 | -2147483648至2147483647 | 0至4294967295 |
FLOATING-POINT浮点数据类型
浮点数据类型以IEEE SINGLE和DOUBLE精度格式存储。两种格式都带一个符号位字段、一个指数字段和一个小数字段。 这些字段用以下方式表示浮点数:
浮点数 = <符号> 1. <小数字段> x 2(<指数字段> - 偏差)
符号位字段
符号位字段是浮点数的最高有效位。0是正数的符号位,1是负数的符号位。
小数字段
小数字段包含归一化数字的小数部分。 归一化数字大于或等于1且小于2。由于所有归一化数字均为1.XXXXXXXX形式,因此1变为隐式,不存储在存储器中。小数字段中的位是二进制点右侧的位,它们表示2的负幂。例如:
0.011(二进制)= 2-2 + 2-3 = 0.25 + 0.125 = 0.375
指数字段
指数字段包含一个偏差指数。也就是说,从指数字段的数字中减去一个常数偏差即可产生实际指数。(偏差使负指数成为可能。)
如果指数字段和小数字段均为零,则浮点数为零。
NaN
NaN(Not a Number - 非数字)是未定义运算结果时使用的特殊值。例如,将正无穷大加到负无穷大将产生NaN。
FLOAT浮动数据类型
FLOAT浮动数据类型以32位长度的IEEE单精确格式存储。最高有效位是符号位,后面8个最高有效是指数字段,其余23位是小数字段。指数的偏差是127。单精确格式值的范围是从1.18 x 10–38 到 3.4 x 1038。浮点数精确到6位小数。
0 000 0000 0 000 0000 0000 0000 0000 0000 = 0.0
0 011 1111 1 000 0000 0000 0000 0000 0000 = 1.0
1 011 1111 1 011 0000 0000 0000 0000 0000 = -1.375
1 111 1111 1 111 1111 1111 1111 1111 1111 = NaN
DOUBLE双
DOUBLE双数据类型以64位长度的IEEE双精度格式存储。最高有效位是符号位,后面11个最高有效位是指数字段,其余52位是小数字段。指数的偏差为1023。单精度格式值的范围是从2.23×10–308 到 1.8×10308。浮点数精确到15位小数。
0 000 0000 0000 0000 0000 ... 0000 0000 0000 = 0.0
0 011 1111 1111 0000 0000 ...0000 0000 0000 = 1.0
1 011 1111 1110 0110 0000 ...0000 0000 0000 = -0.6875
1 111 1111 1111 1111 1111 ... 1111 1111 1111 = NaN