|
本帖最后由 楚香饭 于 2022-11-21 13:00 编辑
6-7位。
因为计算机使用的时二进制,而不是十进制。
一般计算机用整型来表达整数,用定点数和浮点数来表达小数。(目前大多数系统上用浮点数,极少用定点数)
浮点数,类似二进制的科学计数法。
普遍采用的浮点数标准是 IEEEE 浮点数标准,IEEE 单精度浮点数有 32 位,双精度有 64 位。
两者都是分为 s e m 三段,代表符号位,指数位和尾数位。分段规则如下:
┏━━━┯━┯━┯━┓
┃ 精度 │s │e │m ┃
┠───┼─┼─┼─┨
┃单精度│1 │8 │23┃
┠───┼─┼─┼─┨
┃双精度│1 │11│52┃
┗━━━┷━┷━┷━┛
最终计算公示为:n = ( -1 ) ** s * m * ( 2 ** e )
因为单精度有23位二进制表示m段,所以转换成十进制的精度为 log10(2**23) = 6.923(也就是6到7位之间)
现在详细解释一下各段的含义(以单精度 50.5 为例):
(1) s 段:s 段为 1,表示负数,否则表示正数。50.5 是正数,因此,s 段取为 0。
(2) e 段:e 段可以认为是一个整型。比如取值为 10000100 ,即十进制的 132。但参与最后计算的 e 并不是直接的 132。而是 132 于偏移量 127 的差。也就是 5。(所以才能出现负指数)(双精度的偏移量为1023)
(3) m 段:m 段的每一位表示一个数值,取为 0 则不计入总数,取为 1 则计入总数。
第一位表示 1/2,第二位表示 1/4,第三位表示 1/8 ....
比如取为:10010100000000000000000。则表示 1/2 + 1/16 + 1/64 = 0.578125。在这个基础上 + 1。即 1.578125 最终参与计算。
最后的计算 n = ( -1 ) ** 0 * 1.578125 * ( 2 ** 5 ) = 50.5
将以上三段写在一起:
┏━┯━━━━┯━━━━━━━━━━━━┓
┃s │ e │ m ┃
┠─┼────┼────────────┨
┃0 │10000100│10010100000000000000000 ┃
┗━┷━━━━┷━━━━━━━━━━━━┛
最后写在一起:01000010010010100000000000000000
每隔 8 位隔开:
┏━━━━┯━━━━┯━━━━┯━━━━┯━━━━┓
┃ 字节 │01000010│01001010│00000000│00000000┃
┠────┼────┼────┼────┼────┨
┃十六进制│ 42 │ 4A │ 00 │ 00 ┃
┗━━━━┷━━━━┷━━━━┷━━━━┷━━━━┛
最终就表示为:42 4A 00 00
至于储存是是否翻转为:00 00 4A 42,则依赖于具体平台。微机平台上翻转,工作站上不翻转。
|
|