加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

浮点数字转成二进制

发布时间:2020-12-14 03:47:55 所属栏目:大数据 来源:网络整理
导读:? /********************************************32位浮点数字转成二进制,小数点后面的位数,由intNum来决定************************************************/uint32_t FloatToBinary(float value){// (-1) s表示符号位,当s = 0,V为正数;当s = 1,V为

?

/********************************************32位浮点数字转成二进制,小数点后面的位数,由intNum来决定************************************************/uint32_t FloatToBinary(float value){// (-1) s表示符号位,当s = 0,V为正数;当s = 1,V为负数。?// (2)M表示有效数字,大于等于1,小于2。// (3)2^E表示指数位。// 对于单精度 符号位 1 指数为8 有效数字 23uint8_t num=0;uint32_t reval=0,temp=0;uint8_t sign =(value>=0)?0:1; //获取符号位?//emberAfCorePrintln("sign:%d",sign);value= fabs(value); //求绝对值int Interger = floor(value); //获取整数部分float frac = value - (float)Interger; //获取小数部分/************************************************************正数部分42.75;-42.75sign:0Interger:42frac_h:0x1560frac_l:0x0000sign:1Interger:42frac_h:0x9560frac_l:0x0000********************************************************/while (Interger){if(Interger % 2){temp |= (1<<num);}num++;Interger /= 2;?}?emberAfCorePrintln("Interger:%d",temp);temp <<=23;reval=temp;/************************************************************分解小数部分----由于小部分,可能会出现分解不完全的情况,并且float中仅有23位,所以仅仅循环23次------但是对于仅有小数的部分,还要截断一部分,所以需要补充********************************************************/temp=0;for(num=0;num<23;num++){frac *=2;if(frac>=1){frac -=1;temp |=(1<<(22-num));}if(frac==0){break;}}?reval |=temp;//符号位的处理if(sign){reval |=(1<<31); //负数}?//emberAfCorePrintln("frac_h:0x%02x",reval>>16);// emberAfCorePrintln("frac_l:0x%02x",reval&(0xffff));return 1;}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读