例如我有0 100 1110 sign exponent mantisa这个等于3.75。如何将其转换为十六进制或八进制形式?我已经努力搜索了几个小时。请帮忙。
你能帮我吗?这100是4 1110不可能7/8的。(7/8) * 2^43.75
例如我有0 100 1110 sign exponent mantisa这个等于3.75。如何将其转换为十六进制或八进制形式?我已经努力搜索了几个小时。请帮忙。
你能帮我吗?这100是4 1110不可能7/8的。(7/8) * 2^43.75
标志应该很明显。
尾数的意思是,1 + 1/2*first bit + 1/4*second bit + 1/8*third bit...听起来很熟悉?它基本上是二进制计数,除了它是“小数点后”。
指数意味着,将尾数乘以 2^exponent。但是你如何得到exponent它所代表的价值呢?我做了一些谷歌搜索,显然如果设置了最高位,其余的是0(10、100、1000 ...等),那么你有1,如果它是101你有2,等等。意思是如果它是011你有0,010你有-1等等上。所以在这种情况下,我们有1指数。
因此,在这种情况下,您要计算 1.875 (mantisa) *2^1 (2^exponent) 并将其设为正数(符号)。
阅读更多:http ://en.wikipedia.org/wiki/Double-precision_floating-point_format (它适用于双精度大小,但所有原则都应该“适用于”任何大小的浮点)
编辑:这是关于指数的更好解释。
首先,在 IEEE 浮点中,指数的最小值和最大值具有特殊含义 - 全零表示“这是零或次正规数”,全一表示“这是无穷大或 NaN”。因此,即使我们有 3 位指数 - 000to 111,仅001用于110表示普通指数 - 也只有 6 个值。
现在,使用所谓的“指数”偏差将这个 1...6 范围转换为负值和正值 - 特别是,您需要一个 -2...3 范围(最大正指数 > 最大值负指数,所以你不能通过做 1/ 来溢出smallest normalized number。但是, 1/denormalized number可以产生Infinity。)
我们通过取指数中的值来得到这个,如果不是特殊情况,我们从它的二进制值中减去 3 并将其作为它的指数值。
0 100 1110因此
0-> 正号
100-> 二进制值 4,减 3,指数 1
1110-> 1 + 7/8
(1+7/8)*2^1 = 3.75
只需转换位,就好像它是一个整数。忽略您正在处理浮点数的事实。
01001110转换为4E十六进制,因为0100is4和1110is E。(注意我是如何分成四组的。)
八进制也一样,它变成116,因为01is 1,001is1和110is 6。(注意我是如何分成三组的,除了第一组。)