根据位操作将八位十六进制转化为浮点数

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 //*********************************************//
4 //****name: 八位十六进制数转浮点数输出 ***// 5 //****length: 32位 ***// 6 //****formula: x[真值] = ((-1)^s)*1.M*(2^E) ***// 7 //****time: 2019-10-24 ***// 8 //**********************************************// 9 10 11 #define NUMBER_SIGN 1 //数符 12 #define FRAME_SHIFT 8 //移码 13 #define CODING 32 //编码 14 #define DIDITAL_CODING 23 //数码 15 16 float HextoFloat(unsigned int hex) 17 { 18 int i = 1;//提供2的n次方 19 unsigned int ihex = (hex << NUMBER_SIGN); 20 unsigned int decimal_bin = 0; 21 unsigned int dacade = 0; 22 double value; 23 double decimal = 0; 24 int s = (hex >> (CODING - NUMBER_SIGN));//数符 25 int E = (ihex >> (NUMBER_SIGN + DIDITAL_CODING)) - 127;//指数 26 if (E > 0) { 27 dacade = ((ihex << FRAME_SHIFT) >> (CODING - E)) + (i << E);//整数,IEEE754标准 28 decimal_bin = ((ihex << (FRAME_SHIFT + E)) >> (NUMBER_SIGN + FRAME_SHIFT + E));//小数二进制预处理 29 } 30 if (E <= 0){ 31 decimal_bin = (ihex << FRAME_SHIFT) >> (FRAME_SHIFT+ NUMBER_SIGN)+(i << (DIDITAL_CODING+1));//小数二进制预处理,整数位为0,IEEE754标准 32 } 33 value = (i << (DIDITAL_CODING - E)); 34 decimal = double(decimal_bin / value); //小数 35 return s == 0 ? double(dacade + decimal) : double((-1) * (dacade + decimal)); 36 } 37 int main() 38 { 39 unsigned int a = 0x80102000; 40 unsigned int b = 0x41360000; 41 unsigned int c = 0x41A4C000; 42 unsigned int e = 0x00000000; 43 unsigned int d = 0x80000000; 44 unsigned int f = 0xFFFFFFFF; 45 unsigned int g = 0x7FFFFFFF; 46 printf("\n十六进制数:%x 浮点数:%.8f\n",a,HextoFloat(a)); 47 printf("十六进制数:%x 浮点数:%.8f(课本)\n", b, HextoFloat(b)); 48 printf("十六进制数:%x 浮点数:%.8f(课本)\n", c, HextoFloat(c)); 49 printf("十六进制数:%x 浮点数:%.8f(最大负数)\n", d, HextoFloat(d)); 50 printf("十六进制数:%8x 浮点数:%.8f(最小正数)\n", e, HextoFloat(e)); 51 printf("十六进制数:%x 浮点数:%.1f(最小负数)\n", f, HextoFloat(f)); 52 printf("十六进制数:%x 浮点数:%.1f(最大整数)\n", g, HextoFloat(g)); 53 system("pause"); 54 return 0; 55 }

根据位操作将八位十六进制转化为浮点数,

1.注意不同机器上位操作可能有些偏差

2.遵循IEEE547标准

3.2^n可由位运算快速算出

4.已在vs2019上测试成功

猜你喜欢

转载自www.cnblogs.com/threelittlepig/p/11735122.html
今日推荐