找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 471|回复: 5

[研讨] 二进制双精度浮点数转换成十进制

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2021-1-13 21:33:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

(123 82 149 98 55 49 27 65) to 445517.846238412

双精度浮点64位数字到十进制

reverse 表
转换每个二进制到十进制
然后连接起来



01000001 00011011 00110001 00110111
01100010 10001100 01010010 10000001

第一位是符号位, 0 正数 1 是负数
接下的 11 位 是指数位, 10000010001 转换成10进制 1041 , - 1023 得到指数位 = 18
最后的 52 位 是尾数, 1011001100010011011101100010100011000101001010000001
需要在前面添加 "1." (包括小数点) , 1.1011001100010011011101100010100011000101001010000001
转成十进制为 1.69951570983280952909
然后乘以 2^18 = 262144
1.66... x 262144 = 445517.846238412

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 2230个

财富等级: 金玉满堂

发表于 2021-1-14 09:56:51 | 显示全部楼层
做个对论坛有益的人。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2021-1-26 22:34:22 | 显示全部楼层
一个进制转换网页工具

http://www.binaryconvert.com/res ... 4050051056052049050
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2021-1-31 14:07:46 | 显示全部楼层
纠正一下,445517.846238412 -> 0x411B3137628C5281 -> (129 82 140 98 55 49 27 65)


  1. double B2D(BYTE *pData) {
  2.         //double 型的格式8个字节
  3.         // S/E/M
  4.         //-1/-----------11/------.....52/
  5.         //获取符号位,1表示负数,0表示正数;
  6.         int sign = int(pData[0] >> 7);
  7.         cout << "sign= "<<sign << endl;
  8.         //指数位  11位
  9.         int e = int(pData[0] & 0x7F) * 16 + int(pData[1]>>4) - 1023;
  10.         cout << "e = " << e << endl;
  11.         // M 位
  12.         double  m = pow (2,-52)*(pow(256,6) *int(pData[1] &0x0F) + pow(256, 5)* int(pData[2]) + pow(256,4)* int(pData[3]) + pow(256, 3) * int(pData[4]) + pow(256, 2) * int(pData[5]) + 256 * int(pData[6]) + int(pData[7]))  +1;
  13.         cout << "m = " << m << endl;
  14.         double res = pow(-1, sign) * m * pow(2, e);
  15.         return res;
  16. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2021-1-31 14:52:45 | 显示全部楼层
本帖最后由 st788796 于 2021-1-31 17:10 编辑

  1. (defun XD::Math:Hex->Doble (lst / sign e m res)
  2.   (if (and (eq (length lst) 8)
  3.            (vl-every '(lambda (x) (and (= (type x) 'INT) (< -1 x 256)))
  4.                      lst
  5.            )
  6.       )
  7.     (progn
  8.       (setq lst (reverse lst)
  9.             sign (lsh (car lst) -7)
  10.             e         (- (+ (* (logand (car lst) 127) 16)
  11.                        (lsh (nth 1 lst) -4)
  12.                     )
  13.                     1023
  14.                  )
  15.             m         (1+ (*        (expt 2. -52)
  16.                         (+ (* (expt 256. 6)
  17.                               (logand (nth 1 lst) 15)
  18.                            )
  19.                            (* (expt 256. 5) (nth 2 lst))
  20.                            (* (expt 256. 4) (nth 3 lst))
  21.                            (* (expt 256. 3) (nth 4 lst))
  22.                            (* (expt 256. 2) (nth 5 lst))
  23.                            (* 256 (nth 6 lst))
  24.                            (nth 7 lst)
  25.                         )
  26.                      )
  27.                  )
  28.             res         (* (expt -1. sign) m (expt 2. e))
  29.       )
  30.       res
  31.     )
  32.   )
  33. )


  1. _$ (rtos (xd::math:double->dec '(129 82 140 98 55 49 27 65)) 2 15)
  2. "445517.8462384121"
复制代码

_$

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2021-1-31 16:58:31 | 显示全部楼层
double -> HEX

  1. _$ (xdrx_string_format "%016llx" 445517.846238412)
  2. "411b3137628c5281"
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-3-29 09:20 , Processed in 0.188128 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表