dw做网站基础dnf怎么做提卡网站

web/2025/9/26 6:35:24/文章来源:
dw做网站基础,dnf怎么做提卡网站,网站后台管理员怎么做,软件开发文档是什么浮点数也称做实型数据(实数)#xff0c;形式上就是数学中的小数。浮点型数据有两种表达方式#xff1a; 一种是用数字和小数点表示的#xff0c;如123.456#xff1b; 另一种是用指数方式表示#xff0c;如1.2e-6 或1.2E-6(1.2*10-6)。在计算机中实数是如何存储的呢#…浮点数也称做实型数据(实数)形式上就是数学中的小数。浮点型数据有两种表达方式 一种是用数字和小数点表示的如123.456 另一种是用指数方式表示如1.2e-6 或1.2E-6(1.2*10-6)。在计算机中实数是如何存储的呢主要分为定点实数存储方式和浮点实数存储方式这两种。所谓定点实数就是约定整数位和小数位的长度比如用4字节存储实数我们可以让高两个字节存放整数部分低两个字节存储小数部分。这样的好处是计算的效率高缺点是如果我们想存储65536.5由于整数的表达范围超过了两个字节用定点存储的方式就无法存储了。对应地也有浮点实数存储方式就是用一部分二进制位存放小数点的位置信息我们可以称之为”指数域”,其他的数据位用来存储没有小数点的数据和符号我们可以称之为“数据域”、“符号域”。在访问时取得指数域与数据域运算后得到真值如67.625利用浮点实数存储方式数据域可以记录为67625小数点的位置可以记录为10的-3次方。后来引进了浮点协处理器(FPU)专门负责对浮点数的处理使得对处理实数的效率大大提高于是浮点实数存储方式也就普及开来成为了现在主流的实数存储方式。在C/C中使用浮点方式存储实数用两种数据类型来保存浮点数float(单精度)和double(双精度)。Float在内存中占用4字节空间double在内存中占用8个字节空间。Double类型比float类型精度更高。这两种数据在内存中都是以十六进制方式存储但与整型数据有所不同。整型数据是将十进制直接转换成二进制保存在内存中以十六进制方式显示。而浮点类型不是将一个浮点小数直接转换成二进制保存而是将浮点小数转换成二进制码 后 重新编码再进行存储。C/c的浮点数是有符号的。在C/C中将浮点数强制转换成整数时不会采用数学上的四舍五入方式而是舍弃掉小数部分。浮点数的操作不会用到通用寄存器而是用浮点协处理器的浮点寄存器。浮点数的编码方式浮点编码转换采用的是IEEE规定的编码标准float和double这两种类型数据的转换原理相同但由于表示的范围不一样编码方式有些区别。IEEE规定的浮点数编码会将一个浮点数转换为二进制数。以科学计数法划分将浮点数拆分为3个部分符号、指数和尾数。1、float类型的IEEE编码Float类型在内存中占4个字节(32位)。最高位表示符号在剩余的31位中从右到左取8位 用于表示指数其余用于表示尾数。如图2-2所示float类型的IEEE编码1)在进行二进制转换前需要对单精度(float)浮点数进行科学计数法转换。例如将float类型的12.25f(f表示为float单精度类型)转换为IEEE编码需要将12.25f转换成对应的二进制数1100.01整数部分为1100小数部分为01。小数点向左移动每移动1次指数加1移动到除了符号位的最高位1处停止移动。这里移动3次。对12.25f进行科学记数法转换后的二进制部分为1.10001指数部分为3。在IEEE编码中由于在二进制情况下最高位始终为1为一个恒定值故将其忽略不计。这里是一个正数所以符号位添0。12.25f经过IEEE转换后各位的情况符号位0指数为十进制 3127转换为二进制10000010尾数位10001 000000000000000000(当不足23位时低位补0填充)由于尾数位中最高位1是恒定值故省略不计只要在转换回十进制时加1即可。为什么指数位要加127呢由于指数可能出现负数十进制127 可表示二进制数 01111111。IEEE编码方式规定当指数域小于0111111时为一个负数反之为正数因此 指数域加上十进制数 127 表示正数。12.25f转换后的IEEE编码按二进制拼接为 0 10000010 10001000000000000000000。转换后成十六进制数 0x41440000内存中以小端进行存储故为 00 00 44 41。分析结果如图所示2)上面演示了符号位为正指数为也为正的情况。那么什么情况下指数位可以为负呢根据科学记数法小数点向整数部分移动时指数做加法。相反小数点向小数部分移动时指数需要以0起始做减法。浮点数 -0.125f转换成IEEE编码后将会是一个符号位为1指数部分为负的小数。-0.125f经转换后二进制部分为0.001用科学记数法为1.0指数为-3。-0.125f 经过IEEE转码后各位的情况为符号位1指数位十进制127(-3)转换为二进制是 01111100如果不足8位则高位补0尾数位0000000000000000000000000-0.125f经转换后的IEEE编码二进制拼接为 1 01111100 0000000000000000000000000。转换后成十六进制为 0xBE000000内存中显示为 00 00 00 BE。分析结果如图所示3)上面的两个浮点小数部分转换为二进制时都是有穷的如果小数部分转换为二进制时得到一个无穷值则会根据尾数部分的长度舍弃多余的部分。单精度浮点数1.3f小数部分转换为二进制就会产生无穷值依次转换为0.3、0.6、1.2、0.4、0.8、1.6、1.2、0.4、0.8...转换后得到的二进制数位1.01001100110011001100110到第23为时终止尾数部分无法再保存。1.3f经过IEEE转换后各位的情况符号位0指数位十进制0127转换二进制01111111尾数位010011001100110011001101.3f 转换后的IEEE编码二进制拼接为 0 01111111 01001100110011001100110。转换成十六进制数位 0x3fa66666内存中显示为 66 66 a6 3f。由于在转换二进制过程中产生了无穷值舍弃了部分位数所以进行IEEE编码转换后得到的是一个近似值存在一定的误差。再将这个IEEE编码值转换成十进制小数得到的值为1.2516582四舍五入后为1.3.这也解释了为什么C 在比较浮点数值是否为0时要做一个区间而不是直接进行等值比较。如float fTemp 0.0001f; // 精确范围if (fFloat -fTemp fFloat fTemp){fTemp等于0}2.double类型的IEEE编码前文讲解了单精度浮点类型的IEEE编码。Double类型和float类型大同小异只是double类型表示的范围更大占用空间更多精度更准。Double 类型占8字节的内存空间同样最高位也用于表示符号指数位占11位剩余的52位用于表示尾数。在float中指数位范围用8位表示加127后用于判断指数符号。在double中由于扩大了精度因此指数范围使用11位正数来表示加上1023来用于指数符号判断。Double 类型的IEEE编码转换过程和float一样。3.浮点数指令浮点数的操作指令和普通数据类型不同浮点数操作是通过浮点寄存器来实现的而普通数据使用的是通用寄存器如eax、edx、ebx等。浮点寄存器是通过栈结构来实现的由ST(0)~ST(7)共8个栈空间组成每个浮点寄存器占8个字节。每次使用浮点寄存器都是先使用St(0),而不能越过ST(0)直接使用ST(1)。浮点寄存器的使用就是压栈、出栈的过程。当ST(0)存在数据时执行压栈操作ST(0)中的数据将进入到ST(1)中如无出栈操作将顺序地向下压栈直到将浮点寄存器占满。常用浮点数指令如下所示IN 表示操作数 入栈。OUT表示操作数出栈。常用浮点数指令其他运算指令和普通指令类似只需在前面加F就行如 FSUB和FSUBP等。在使用浮点指令时都要先利 用ST(0)进行运算。当ST(0)中有值时便会将ST(0)中的数据顺序向下存放到ST(1)中然后再将数据放入ST(0)中。如果再次操作ST(0)则会先将ST(1)中的数据放入ST(2)中然后将ST(0)中的数据放入到ST(1)中最后才将新的数据存放到ST(0)。以此类推在八个浮点寄存器都有值的情况下继续向ST(0)存放数据这时会丢弃ST(7)中的数据信息。1)下面通过一个简单的例子来了解各个指令的使用流程// 浮点数使用 float fFloat (float)argc;00401028 fild dword ptr [ebp8]//将ebp8处的整型数据转换成浮点型并放入ST(0)中对应变量 argc0040102B fst dword ptr [ebp-4]//从ST(0) 中取出数据以浮点编码的方式放入地址ebp-4 中对应变量 fFloat printf(%f, fFloat);0040102E sub esp,8//这里对esp减 8 操作是由于浮点数作为变参函数的参数时需要转换成双精度浮点值,//这步操作是 提前准备8字节的栈空间以便存放double数据。00401031 fstp qword ptr [esp]//将ST(0) 中的数据传入esp中并弹出ST(0)。00401034 push offset string %f (00426020)00401039 call printf (00401420)0040103E add esp,0Ch argc (int)fFloat;//将 float类型数据转换成int型00401041 fld dword ptr [ebp-4]//将ebp-4处的数据以浮点型压入ST(0)中。00401044 call __ftol (00401588)//调用函数 __ftol 进行浮点数转换 __ftol的实现见下文。00401049 mov dword ptr [ebp8],eax printf(%d, argc);0040104C mov eax,dword ptr [ebp8]0040104F push eax00401050 push offset string %d (0042601c)00401055 call printf (00401420)0040105A add esp,8从上面示例中可以发现float类型的浮点数虽然占4个字节但都是以8个字节(qword)方式进行处理。当浮点数作为参数时并不能直接压栈。Push 指令只能传入4字节数据到栈中这样会丢失4字节数据。这就是为什么使用printf函数以整型方式输出浮点数会产生错误的原因。Printf以整数方式输出时将对应参数作为4字节数据按补码方式解释。而真正压入的参数为浮点类型时数据长度为8字节需要按浮点编码解释。2)浮点数作为返回值的情况也是如此同样需要传递8字节数据代码如下所示float fFloat;fFloat GetFloat();00401058 call ILT5(_GetFloat) (0040100a)//调用GetFloat函数0040105D fst dword ptr [ebp-4]//由于浮点数需要特殊处理浮点数占8个字节无法使用EAX进行传递//因此使用 浮点寄存器 ST(0) 作为返回值 printf(%f, fFloat);00401060 sub esp,800401063 fstp qword ptr [esp]00401066 push offset string %f (00426020)0040106B call printf (00401420)00401070 add esp,0Ch//GetFloat 函数 float GetFloat() {00401010 push ebp00401011 mov ebp,esp00401013 sub esp,40h00401016 push ebx00401017 push esi00401018 push edi00401019 lea edi,[ebp-40h]0040101C mov ecx,10h00401021 mov eax,0CCCCCCCCh00401026 rep stos dword ptr [edi] return 12.25f;00401028 fld dword ptr [string %d (0042601c)]//将浮点数保存在 ST(0)中在返回值为浮点数的情况下无法使用EAX//使用ST(0)作为返回值进行传递。 }0040102E pop edi0040102F pop esi00401030 pop ebx00401031 mov esp,ebp00401033 pop ebp00401034 ret3)在上面代码中float型数据被强制转换为int型编译器通过了__ftol函数实现了转换过程如下面所示__ftol:00401588 push ebp00401589 mov ebp,esp0040158B add esp,0FFFFFFF4h//保存环境预留语句变量空间0040158E wait0040158F fnstcw word ptr [ebp-2]00401592 wait00401593 mov ax,word ptr [ebp-2]00401597 or ah,0Ch0040159A mov word ptr [ebp-4],ax0040159E fldcw word ptr [ebp-4]//浮点异常检查、CPU与FPU的同步工作004015A1 fistp qword ptr [ebp-0Ch]//从ST(0)中取出8字节数据转换成整型并存入到ebp-0ch中//从ST(0)中弹出004015A4 fldcw word ptr [ebp-2]004015A7 mov eax,dword ptr [ebp-0Ch]//使用eax保存整型数据的低4字节用于返回004015AA mov edx,dword ptr [ebp-8]//使用edx保存整型数据的高4字节用于返回004015AD leave//释放栈空间004015AE ret004015AF int 3————————摘自《C反汇编与逆向分析技术揭秘》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/82052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

江苏大汉建设实业集团网站微商城网站建设市场

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 将长视频转换为易于处理的 Spacetime Patch(时空补丁)是一项挑战,尤其是当视频内容复杂或包含长时间连续场景时。在计算机视觉和视频分析等领域,Spacetim…

南京做网站公司 雷仁苏州个人网站制作公司

目录 1. Base64加密 2. MD5加密 3. SHA加密(sha1\sha\sha224\sha256\sha384\sha512) 4. RSA加密-公钥加密,私钥解密 1. Base64加密 1.1 在需要加密传输的接口下新增BeanShell 预处理程序,${username}可替换成value值&#xff…

山西孝义网站开发广州哪家做网站好

满意答案luluthe...2013.08.26采纳率:45% 等级:11已帮助:8894人关于二级考试科目:与去年相同,二级一共七个科目。二级科目分成两类,一类是语 言程序设计(C、C、Java、Visual Basic、Delphi),…

大沥做网站wordpress文章留言

我们可以根据下面有适配属性的Widget来进行屏幕适配 1.MediaQuery 通过它可以直接获得屏幕的大小(宽度 / 高度)和方向(纵向 / 横向) Size screenSize MediaQuery.of(context).size; double width screenSize.width; double h…

微信网站怎么做的好抖音代运营介绍

NAN NAN 整体意思为Not a Number 不是一个数, NaN(Not a Number,非数)是计算机科学中数值数据类型的一类值,表示未定义或不可表示的值。常在浮点数运算中使用。首次引入NaN的是1985年的IEEE 754浮点数标准。 EEE 75…

高端网站设计企业网站做数据监测

近日,紫光展锐高性能5G SoC T820与百度飞桨完成I级兼容性测试(基于Paddle Lite工具)。测试结果显示,双方兼容性表现良好,整体运行稳定。这是紫光展锐加入百度“硬件生态共创计划”后的阶段性成果。 本次I级兼容性测试完…

网站空间ftp连接失败有限责任公司破产法人承担的责任

基础知识:方差,协方差,协方差矩阵 方差:描述了一组随机变量的离散程度 方差 每个样本值 与 全部样本的平均值 相差的平方和 再求平均数,记作: 例如:计算数字1-5的方差,如下 去中心化…

都匀网站谷德室内设计网

互联网摸鱼日报(2024-03-22) 36氪新闻 一加 Ace 3V 售价 1999 起,全面普及旗舰 AI 体验 黄仁勋对话Transformer七子:我们被困在原始模型里,还需要更强大的新架构 小龙虾们吓得一激灵,怎么三月份就开始吃我了? 谷歌…

网站建设 博客自己建个购物网站

\qquad 本文中的人类机器人编程(Human Robot Programming)意指“基于创伤的脑控(trauma-based mind control, T.B.M.C)”或“基于创伤的编程(trauma-based programming)”,文中用英文缩写“T.B.M.C”指代。T.B.M.C的操纵主体是施加编程的个人或机构,文中…

建网站推广乌海学校网站建设

STL详解 —— stack和queue的介绍及使用 stackstack的定义方式stack的使用 queuequeue的定义方式queue的使用 stack stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其只能从容器的一端进行元素的插入与提取操作。 stack的定义方式 首…

企业网站开发课程网站备案 做网站时就需要吗

队列-队列的顺序表示和实现和顺序栈相类似,在利用顺序分配存储结构实现队列时,除了用一维数组描述队列中数据元素的存储区域之外,尚需设立两个指针front和rear分别指示“队头”和“队尾”的位置。为了在C语言中描述方便,在此我们约…

黄骅市网站建设价格wifi客户管理系统管理

一:介绍 在Django中使用MySQL时,通常情况下,Django的数据库层会为你管理数据库连接。Django的数据库接口是线程安全的,这意味着它会自动为每个线程创建和管理数据库连接。在大多数情况下,你不需要手动创建线程池来管理…

电子商务网站登录温州最牛叉的seo

设想你正在阅读手机上的文章,突然间显示屏变暗了一点。显然,你设置的30秒或1分钟超时息屏对于常规使用来说还可以,但对于阅读纯文本片段,还远远不够。因此,这时你会轻触屏幕,可能会上下滑动,以防…

酒店品牌设计网站建设八戒设计网

2017年3月26日晚间,农业银行发布了2017年的年报。数据显示,2017年农业银行实现营业收入5428.98亿元,同比增长6.42%,净利润1929.62亿元,同比增长4.9%,截至2017年末,农业银行总资产21.05万亿元&am…

北京网站建设外包公司哪家好长春净月潭建设投资集团网站

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

手机网站前青岛网站建设工作室织梦模板

一、数据库的简介 RDBMS简介: Relational Database Management System,通过表来表示关系类型。当前主要使用两种类型的数据库:关系型数据库和非关系型数据库。所谓的关系型数据库RDBMS是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来…

小学学校网站模板免费下载保定电子商务网站建设

文章目录 Git - 在PyCharm/Idea中集成使用Git1.新建GitHub仓库2.将仓库与项目绑定3.在PyCharm中使用Git4.新建Gitee仓库5.将仓库与项目绑定6.在IDEA中使用Git Git - 在PyCharm/Idea中集成使用Git 本文详细讲解了如何在 PyCharm 或 Idea 中配置 Gitee 或 GitHub 仓库&#xff0…

江西建设工程招标投标网站邯郸又出现一例

这里写目录标题 场景效果图功能实现1:html代码功能实现2:css样式功能实现3:js代码补充内容page-break-inside 属性page-break-after属性page-break-before 属性 场景 最近在写后台管理系统时,遇到一个需求,就是要实现…

网站布局英文晋江市住房建设局网站

vh:相对于视窗的高度,那么vw:则是相对于视窗的高度。 “视区”所指为浏览器内部的可视区域大小,即window.innerWidth/window.innerHeight大小,不包含任务栏标题栏以及底部工具栏的浏览器区域大小。 详细vh的用法,大家可以参考http…

上海 网站建设 外包深圳商城网站设计

从参赛类别的区分到大唐杯名称由原来的“第九届‘大唐杯’全国大学生移动通信5G技术大赛”变更为“第九届‘大唐杯’全国大学生新一代信息通信技术大赛”一系列的变化。 接下来重点讲解本科A组的情况分析: 需要注意的是,和去年的比赛不同,今年并不是两人互相讨论,而是和省…