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