加倍和除以浮点值

我有一个函数,我相信将int转换为浮点值,拆分为值的符号指数和分数组成部分。 使用IEEE 754表示浮点值。

在此处输入图像描述

unsigned test(unsigned x) { // split the given bits of sign exponent and fraction, combine to return unsigned int sign = (x & 0x80000000) >> 31; unsigned int expo = (x & 0x7F800000) >> 23; unsigned int frac = (x & 0x007fffff); return (sign << 31) | (expo << 23) | frac; } 

但我不确定如何从这个浮点表示计算减半或加倍的值。

 unsigned doubled(unsigned x) { // get float // float = unsigned int to float // doubleFloat = 2*f // if float is not a number // return unsigned float // else return unsigned integer of half float unsigned int sign = (x & 0x80000000) >> 31; unsigned int expo = (x & 0x7F800000) >> 23; unsigned int frac = (x & 0x007fffff); if (expo == 0xff) return uf; else ... } 

您似乎使用IEEE 754来表示Float值。

如果要将二进制表示加倍,则只需要将expoent加1。 如果你想减半,只减1,也是如此

请记住,只有当您的号码在正常范围内时才会出现这种情况,即使在加倍或减半之后也是如此