浮点型变量的存储格式

C语言中浮点型变量的定义、存储与输出详解 浮点型变量用于存储小数,分为单精度(​​float​​​)和双精度(​​double​​)两种类型。// 单精度浮点数// 双精度浮点数单精度浮点数常量以​​f​​​或​​F​​结尾。双精度浮点数常量默认没有后缀。// 单精度浮点数常量// 双精度浮点数常量。 阅读详情

float的内存结构,我用一个带位域的结构体描述如下:

  struct MYFLOAT

  {

  bool bSign : 1; // 符号,表示正负,1位

  char cExponent : 8; // 指数,8位

  unsigned long ulMantissa : 23; // 尾数,23位

  };

  符号就不用多说了,1表示负,0表示正

  指数是以2为底的,范围是 -128 到 127,实际数据中的指数是原始指数加上127得到的,如果超过了127,则从-128开始计,其行为和X86架构的CPU处理加减法的溢出是一样的。

  比如:127 + 2 = -127;-127 - 2 = 127

  尾数都省去了第1位的1,所以在还原时要先在第一位加上1。它可能包含整数和纯小数两部分,也可能只包含其中一部分,视数字大小而定。对于带有整数部分的浮点数,其整数的表示法有两种,当整数大于十进制的16777215时使用的是科学计数法,如果小于或等于则直接采用一般的二进制表示法。科学计数法和小数的表示法是一样的。

  小数部分则是直接使用科学计数法,但形式不是X * ( 10 ^ n ),而是X * ( 2 ^ n )。拆开来看。

  0 00000000 0000000000000000000000

  符号位 指数位 尾数位

 

实例:

12.5:
1. 整数部分12,二进制为1100; 小数部分0.5, 二进制是.1,先把他们连起来,从第一个1数起取24位(后面补0):
1100.10000000000000000000
这部分是有效数字。(把小数点前后两部分连起来再取掉头前的1,就是尾数)
2. 把小数点移到第一个1的后面,需要左移3位, 加上偏移量127:127+3=130,二进制是10000010,这是阶码。
3. -12.5是负数,所以符号位是1。把符号位,阶码和尾数连起来。注意,尾数的第一位总是1,所以规定不存这一位的1,只取后23位:
1 10000010 10010000000000000000000
把这32位按8位一节整理一下,得:
11000001 01001000 00000000 00000000
就是十六进制的 C1480000.

2.025675                                    
1. 整数部分2,二进制为10; 小数部分0.025675, 二进制是.0000011010010010101001,先把他们连起来,从第一个1数起取24位(后面补0):
10.0000011010010010101001
这部分是有效数字。把小数点前后两部分连起来再取掉头前的1,就是尾数: 00000011010010010101001
2. 把小数点移到第一个1的后面,左移了1位, 加上偏移量127:127+1=128,二进制是10000000,这是阶码。
3. 2.025675是正数,所以符号位是0。把符号位,阶码和尾数连起来:
0 10000000 00000011010010010101001
把这32位按8位一节整理一下,得:
01000000 00000001 10100100 10101001
就是十六进制的 4001A4A9.

-1.99744
还需要详细说吗?

如果只有小数部分,那么需要右移小数点. 比如右移3位才能放到第一个1的后面, 阶码就是127-3=124.

补充一个浮点二进制数手工转换成十进制数的例子:
假设浮点二进制数是 1011 1101 0100 0000 0000 0000 0000 0000
按1,8,23位分成三段:
1 01111010 10000000000000000000000
最后一段是尾数。前面加上"1.", 就是 1.10000000000000000000000
下面确定小数点位置。阶码是01111010,加上00000101才是01111111(127),
所以他减去127的偏移量得-5。(或者化成十进制得122,122-127=-5)。
因此尾数1.10(后面的0不写了)是小数点右移5位的结果。要复原它就要左移5位小数点,得0.0000110, 即十进制的0.046875
最后是符号:1代表负数,所以最后的结果是 -0.046875

还要注意其他机器的浮点数表示方法可能与此不同. 不能任意移植.

sscanf是一个 C 语言中的函数,用于从字符串中按照指定的格式读取数据。sscanf 函数根据 %d 和 %f的格式要求,从字符串 str 中解析出了整型和浮点型数据 函数并不会检查是否越界或者格式错误,因此在使用时需要确保传入的字符串和格式化字符串的匹配关系以及变量的类型匹配关系。字符串中解析出对应的数据,并将结果存储到指定的变量中。解析成功时,返回成功解析的参数个数;,它指定了要读取的数据的格式。之后可以传入多个指向变量的指针作为可变参数,用于接收解析后的数据。是一个 C 语言中的函数,用于从字符串中按照指定的格式读取数据。,它是要被解析的字符串。中解析出了整型和浮点型数据,并将结果存储到。函数打印了解析后的结果。字符串的格式要求,从。的格式要求,从字符串。 阅读详情

相关推荐

SAP ERP 物料主数据同步外围系统

w_input-beskz = i_marc_new-beskz."采购类型 " BESKZ--- ADD BY HX_FHJ 20210106。w_input-beskz = lw_marc-beskz."采购类型 " BESKZ--- ADD BY HX_FHJ 20210106。w_input-sobsl = i_marc_new-sobsl."特殊采购类型-虚拟物料标识。

ChampaignWolf的专栏 1746

二进制的减法

注:正数的补码是其自身 负数的补码 是其反码+1 这里需要说明的是,在计算机中做二进制数运算时,一定要明确是在多少位的整型前提下进行的,这样才能够正确处理位数溢出的问题。 其实减法也可以看成加法 6+(-4) 无论加减法总结:补码相加 结果再求补码 1表示负 0表示正 在计算机中,负数是使用它的补码来表示的。所谓补码,就是反码+1。所谓反码,就是二进制数逐位取反。所谓逐位取反,就是1变成0,0变成1。例如: 原来的二进制数: 1011011101101反码: 01001000100..

北漂猿 1万+

求一个点到任意两个点所在直线距离 C#代码公式

求点C(X0,Y0) 到点A(x1,y1)和点B(x2,y2)所在直线的距离 1.已知任意两个点,求这两个点所在直线 已知点A(x1,y1),点B(x2,y2) 设直线上另外任意一个点为(x,y) 那么 (x-x1)/(y-y1) = (x2-x1)/(y2-y1); 整理后得方程: (y2-y1)x + (x1-x2)y + (y1-...

qq_29434987的博客 4492

为啥127+1是等于-128

为啥127+1是等于-128 为什么127+1是等于-128java中字节型数据范围是-128~127;为什么-128-1就会等于127;127+1又等于-128了呢?到 为什么127+1是等于-128 java中字节型数据范围是-128~127;为什么-128-1就会等于127;...

chongzhaxue1316的博客 2119

STM32CubeMX定时器配置

因为只有当 CH2 处于 输入模式 时,硬件才能把这根脚送进滤波器(TI2FP2通道之前要滤波),再生成 TI2FP2 这条支路供 Slave-Mode 控制器使用,也就是说TI2FP2 并不是“独立存在”的,但在CubeMX配置时:如下图,我们只设置Slave Mode和TI1FP1,之后,CH1就自动配置为 Input Capture 了,下图发现,Channel1只能 Input Capture 或者Disable。哪来的主定时器和从定时器呢?把待测 PWM 的高电平当“门”,连接到ETR。

2402_89015641的博客 3185

IPsec (主模式,野蛮模式)

IPsec vpn的主模式和野蛮模式

七汣的博客 3415

java基本语法——变量

Java定义的数据类型 一、变量按照数据类型来分: 基本数据类型: 整型:byte、shor、int、long 浮点型:float、double 字符型:char 布尔型:boolean 1、整型:byte(1字节=8bit) short(2字节) int(4字节) long(8字节) ①byte范围:-128~127 ②声明long型变量,必须以“l”或“L”结尾。(不加时将自动转换为int类型,整数大时出现过大整数的编译失败) ③通常,定义整型变量时,使用int型。 2、浮点型:float(4字节) d

MoerPerfect的博客 6417

人形机器人解耦驱动腿部设计与FAST性能优化

机器人运动控制的核心在于动力学解耦与能量效率优化。通过多连杆机构设计,可以实现关节运动的独立控制,显著降低惯性叠加和能量损耗。DecARt Leg采用创新的齿轮-四杆复合机构,将腿部伸缩与摆动运动完全解耦,配合多杆踝关节传动系统,实测行走速度可达4.18m/s。这种解耦设计不仅提升了动态性能,其提出的FAST指标更为腿部构型提供了量化评估基准,在仓储物流、地形适应等场景展现出显著优势,为人形机器人运动控制提供了新的技术路径。

weixin_33759613的博客 238

c语言定义一个 float变量

在 C 语言中, 使用 "float" 关键字定义一个浮点型变量。例如: float x; 这样就定义了一个名为 "x" 的浮点型变量。

weixin_35750953的博客 1322

金融波动预测:GARCH模型实战解析与ARIMA对比

本文深入解析GARCH模型在金融波动预测中的实战应用,并与传统ARIMA模型进行对比。通过沪深300指数日收益率数据的案例分析,展示GARCH模型如何有效捕捉波动聚集效应,提升极端波动预测准确率。文章包含Python代码实现、参数解读及模型选择指南,为量化交易者提供实用的波动率建模解决方案。

weixin_29098367的博客 189

【计算摄影】相机成像原理:从光到JPEG图像

本文我们将从最基本的相机成像原理开始论述,再讨论光线进入相机后,经过一系列处理成为JPEG图像的大致流程。

qq_35149975的博客 2万+

浮点数:不同的内存存储格式,当整型变量赋值给浮点型变量会发生什么?

问题: 计算机存储中,整型数据是以补码的形式存储在存储介质中,而浮点型数据是遵循IEEE754标准将数据存储在存储介质中。当整型变量赋值给浮点型变量的时候,对于两种不同的存储形式,计算机是怎么完成数据的复制? 首先,编一个简单的C程序,通过编译生成的汇编文件看一下计算机是怎么处理的。 /*文件名:1.c*/ #include <stdio.h> int main(int argc, c...

npc666666的博客 3866

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

浮点型变量在计算机内存中的存储格式

浮点型变量在计算机内存中占用4字节(Byte),即32-bit。遵循IEEE-754格式标准。 一个浮点数由2部分组成:底数m 和 指数e。 ±mantissa × 2exponent (注意,公式中的mantissa 和 exponent使用二进制表示) 底数部分 使用2进制数来表示此浮点数的实际值。 指数部分 占用8-bit的二进制数,可表示

一切从心开始 785

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

浮点保留两位小数_2.14 浮点型数据的输入输出

★视频分享★浮点型数据输出格式字符★浮点型输出格式字符的修饰字符★浮点型数据输入格式字符★浮点型数据赋值类型转换整型数据赋给浮点型变量:将整型数据转换成浮点数形式赋给浮点型变量超过存储精度的赋值:float 型变量只能保留 6-7 位有效数字,double 型变量只能保留 15-16 位有效数字,超过部分不能正确赋值超过存储范围的赋值:超过存储范围不能正确赋值,应该避免出现这种...

weixin_36272668的博客 2610

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

c语言浮点型常量7.0f,C语言学习 - 浮点型数据类型

在 C语言中,浮点型数据类型可分为:float(单精度)、double(双精度)、long double(长双精度)。浮点型数据包括浮点型常量和浮点型变量浮点型常量I. 小数形式由数字和小数点组成,且必须有小数点,如:1.23、0.65、.29、7.、0.0。II. 指数形式以幂的形式表示,由字母e或E后跟一个以10为底的幂数,字母e或E前必须有数字,字母e或E后面的指数必须为整数,如:1.2e3...

weixin_39940425的博客 4059

【C语言入门教程】2.4 浮点型数据

浮点型数据又称实型数据,是一个以十进制表示的符号实数。符号实数的值包括整数部分、尾数部分和指数部分。 2.4.1 浮点型常量 一些较大的数值,或者有小数位、指数位的数值都需要用浮点型常量表示。浮点型常量的形式是: [正负符号] [数值] .[数值] [E | e [正负符号] 数值] 其中,“数值”是一位或多位十进制数字,E 或 e 是指数符号。小数点之前是整数部分...

weixin_30443813的博客 189

数据存储与输出输入

转载:http://www.cnblogs.com/hellokitty1/p/4032999.html 1.用最高位表示数字的正负号。 0表示正号, 1表示负号。 2.字符A用十进制数表示是65,字符a用十进制数表示是97. 3.数据类型:整型 ( 关键字 占用字节数) sh...

weixin_30545285的博客 114

浮点数在内存中的存储格式

<br />转自:http://wxdlut.blog.163.com/blog/static/1287701582009101182046692/<br /> <br />浮点型变量在计算机内存中占用4字节(Byte),即32-bit。遵循IEEE-754格式标准。<br />一个浮点数由2部分组成:底数m 和 指数e。<br />                         ±mantissa × 2exponent<br /> (注意,公式中的mantissa 和 exponent使用二进制表示)

748

四、Java-----数据类型与变量

Java中,数据类型主要分为两大类:基本数据类型和引用数据类型。在Java中,变量是存储数据值的基本单元,用于在程序中保存和操作数据。通俗地说,在程序中,把经常改变的量称为变量。比如:人的年龄、成绩、函数的计算结果等等。

m0_55318751的博客 1067

C语言数据类型和变量

举个例子,一个人的姓名ZhangSan,就是自定义类型中的数组(多个字符组成的集合)。自定义类型也可以嵌套(自定义类型跟内置类型组成一个新的自定义类型),以后再讲。

m0_70397606的博客 2083

Python初阶-变量、数据类型、格式化输出

举个生活中的例子,我们喝水是不是需要装水的水杯。水杯就好比存储数据的容器,而水就好比是变量。水杯是否不止可以装水,还可以装可乐、牛奶、橙汁等,就引证变量存储数据是临时的,是可以发生改变的。由反斜杠加上一个字符或数字组成,它把反斜杠后面的字符或数字转换成特定的意义。类型就是用于代表某个事情的真(对)或假 (错),如果这个事情是正确的,用 True。方式输出必须掌握,因为这是在Python中最常用的方式,其他看明白就行。里为了应对不同的业务需求,也把数据分为不同的类型。可以单引号,也可以用双引号,甚至三引号。

2303_80630903的博客 2116

(一)C语言之数据类型

在这里主要讲了基本的知识,具体练习时注意用代码看看数据存储的位数和大小,像char a=127;a=a+1;这时候a的值。可以用sizeof查看数据类型占的字节数。以及不同数据类型之间如何自动转换和强制转换,还有printf和scanf的具体用法,多动手练习一些容易模糊的东西,自己用代码去尝试。 (一)c语言数据类型 这个是我总结的一些基础类型知识,通过上图可以看到c语言的基本数据类型是字符...

水枂的博客 2353

数据存储——练习+浮点型存储

——— 存 S M E。]{有的时候算不出来 ——9.6f会发生精度丢失}--->小数,浮点数无法精确保存。{fioat-->E(真实值)+127(中间值)-->126---储存}(如果有效数字M全为0,表示+-无穷大(正负取决于符号位S))(浮点数数的指数E=1~127(1~1023)即为真实值)浮点数表示的范围:float.h中定义。整数表示的范围:limits.h中定义。2表示' . '往前移了两位。(f-->表示float)

qq_75195919的博客 164

浅谈变量的原始值、存储状态、实际值和输出值

计算机用存储单元存储数据(编码后的数据),C语言中用变量标识计算机中的存储单元。 C语言中有long i,j;i=1;j=-1;,则相应的计算机中就有四个字节的整型变量,其存储状态为00000000000000000000000000000001(十六进制形式为00000001)和11111111111111111111111111111111(十六进制形式为ffffffff)。因此,说变量i和

C语言内涵教程 1589
上一篇: C语言中断程序解读
下一篇: 如何解决VS2003、VS2005等的问题:无法执行添加/移除操作,因为代码元素是只读的
littleshellbigshell
博客等级 码龄19年 5粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值