当前位置: 首页 > news >正文

[逆向基础] 浮​点​数​到​二​进​制​的​转​换

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

我自己的理解,因为小数点是浮动的,所以叫做浮点数,^_^。

目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算。这种结构是一种科学计数法,用符号、指数和尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号。

下面是具体的规格:

               符号位      阶码      尾数      长度 
float           1          8        23       32 
double          1          11       52       64  

以下通过几个例子讲解浮点数如何转换为二进制数

###例一:

####已知:double类型38414.4。 求:其对应的二进制表示。

分析: double类型共计64位,折合8字节。由最高到最低位分别是第63、62、61、……、0位:
最高位63位是符号位,1表示该数为负,0表示该数为正;
62-52位,一共11位是指数位;
51-0位,一共52位是尾数位。

步骤: 按照IEEE浮点数表示法,下面先把38414.4转换为十六进制数。 把整数部和小数部分开处理: 整数部直接化十六进制:960E。 小数的处理: 0.4=0.50+0.251+0.1251+0.06250+…… 实际上这永远算不完!这就是著名的浮点数精度问题。所以直到加上前面的整数部分算够53位就行了。

隐藏位技术:最高位的1不写入内存(最终保留下来的还是52位)。
如果你够耐心,手工算到53位那么因该是: 38414.4(10)=1001011000001110.0110011001100110011001100110011001100(2)

科学记数法为: 1.001011000001110 0110011001100110011001100110011001100,右移了15位,所以指数为15。

或者可以如下理解: 1.001011000001110 0110011001100110011001100110011001100×2^15于是来看阶码,按IEEE标准一共11位,可以表示范围是-1024 ~ 1023。

因为指数可以为负,为了便于计算,规定都先加上1023(2^10-1),在这里,阶码:15+1023=1038。 二进制表示为:100 00001110;
符号位:因为38414.4为正对应 为0;
合在一起(注:尾数二进制最高位的1不要):
01000000 11100010 11000001 110 01100 11001100 11001100 11001100 11001100

转载请注明出处!http://www.0x520.com/2007/10/16/171.html

转载于:https://my.oschina.net/huangsz/blog/286242

相关文章:

  • 多线程:volatile
  • android网络编程——http post
  • linux文件和目录权限的设置
  • c/c++面试题(5)(c++重要的概念详解)
  • 执行计划基础 动态采样
  • 浅谈UML的概念和模型之UML九种图
  • iOS开发百问(4)
  • 使用mysqldump导入导出MySQL数据库
  • perl:warning:Setting locale failed解决办法
  • tomcat启用远程调试
  • 源码安装nginx及简单应用
  • C++的异常处理之二:C++11的异常处理
  • wamp环境如何使用ip访问站点
  • 轻量级表达式树解析框架Faller
  • 写在工作满三年的时候
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • angular学习第一篇-----环境搭建
  • Docker入门(二) - Dockerfile
  • JavaScript 奇技淫巧
  • Linux Process Manage
  • MaxCompute访问TableStore(OTS) 数据
  • MobX
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • Vue官网教程学习过程中值得记录的一些事情
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 从输入URL到页面加载发生了什么
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • NLPIR智能语义技术让大数据挖掘更简单
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (LeetCode C++)盛最多水的容器
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (新)网络工程师考点串讲与真题详解
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .bat批处理出现中文乱码的情况
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .net反编译的九款神器
  • .net连接MySQL的方法
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .NET下的多线程编程—1-线程机制概述
  • .stream().map与.stream().flatMap的使用
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [ABC294Ex] K-Coloring
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [C#] 如何调用Python脚本程序
  • [CSS3备忘] transform animation 等