首页 > 其他分享 >【C语言】浮点型数据的存储详细讲解

【C语言】浮点型数据的存储详细讲解

时间:2025-01-13 14:28:58浏览次数:3  
标签:1.01 存储 pnum printf 补码 C语言 浮点 讲解


在引入知识之前,先来看一个案例,就知道了解浮点型数据存储的重要性与必要性。

举个例子:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
	 
int main()
{
	int num = 9;
	float *pnum = (float *)&num;//强制转换类型
	printf("n的值为:%d\n",n);
	printf("*pFloat的值为:%f\n",*pnum);
 
	*pnum = 9.0;
	printf("num的值为:%d\n",n);
	printf("*pFloat的值为:%f\n",*pnum);
	return 0;
}

一般情况下我们都会认为 *pnum 打印的就是n的值,只不过是以浮点型打印出来,所以是 9.000000 啊,然后下面的n又因为 *pnum 的修改,加之因为 %d 输出,所以还是 9 啊,但是结果不是,打印出来的结果如下图所示:

在这里插入图片描述

结果与我们想的有很大的偏差。。。。。那就有必要让我们来了解浮点型数据的存储啦!


1.首先,根据上面的实例,我们可以发现整型和浮点型数据的存储方法是不一样的!

2.那么浮点型数据是怎么存储的呢?

(1)根据国际标准 IEEE754 ,任意一个二进制浮点数V可以表示为下面的形式:

举例来说:十进制的 5.0,写成二进制是 101.0,相当于 1.01 * 2^2。那么,按照上面的 V 的格式,可以得出 S=0M=1.01E=2

十进制的 -5.0,写成二进制是 -101.0 ,相当于 -1.01 * 2^2 。那么,S=1M=1.01E=2

相对应的 float 型是 32 位的,它的存储空间如下:

在这里插入图片描述

相对应的 double 型是 64 位的,它的存储空间如下:

在这里插入图片描述

对于M与E的特别规定:

在这里插入图片描述

E的使用:

在这里插入图片描述
在这里插入图片描述

所以我们再对刚才的代码加以解释:

在这里插入图片描述

1.首先我们先把n的补码写出来,因为n是正数,所以它的原反补相同。

2.按照上面的方法,把n的补码分解后发现它的E为全0,所以相当于一个无穷小的数字,所以此时 *p0.000000 ……

3.将 *p 改成 9.0 后按照上面的方法,先改成二进制 1001.1,然后写成 (-1)^0 * 1.001 * 2^3,最后按照格式变成补码,存到内存中去,此时补码为 01000001000100000000000000000000 ,而 n 为整型数据,所以先取出这个补码,又因为其为正数,所以直接将补码转为十进制 %d 输出:

在这里插入图片描述

结果与我们之前执行的结果一致!


浮点型数据存储是很重要的知识点,它也加强了我们对数据存储的了解!

标签:1.01,存储,pnum,printf,补码,C语言,浮点,讲解
From: https://blog.csdn.net/lirendada/article/details/145115224

相关文章

  • C语言关键字介绍
    •关键字都有特殊的意义,是保留给C语⾔使⽤的•程序员⾃⼰在创建标识符的时候是不能和关键字重复的•关键字也是不能⾃⼰创建的。C语⾔中有⼀批保留的名字的符号,⽐如:int、if、return,这些符号被称为保留字或者关键字。 C语言有多少个关键字? c语言中的关键字是不......
  • LeetCode热题100-两数相加【JavaScript讲解】
    题目:题解:根据题目(2->4->3)+(5->6->4)=(7->0->8),根据加法的计算过程我们知道首先从低位开始算起,也就是说应该先计算2+5=7;4+6=10,向前进一位,此处取余数0;3+4+进一位的1=8;所以答案是7->0->8。最关键的是最后的进位一定要记得,如果最后相加的和需要进位!!!解题代码:/***......
  • C语言小作业——电话号码加密器
        请你设计一个电话号码程序:它可以接收用户输入的11位电话号码字符串(假设输入已经符合要求,因此不进行输入验证),并按照指定的加密规则对电话号码进行加密,然后输出加密后的虚拟号码。加密规则是:电话号码的前3位数字不变,从第4位开始,每一位数字的ASCII码值加上一个固定的......
  • C语言指针详解
    指针前言在这部分,需要大家花时间理解和练习用什么错误和缺失,也欢迎大家补充!!!1.内存和地址在现实生活中,对于一个任何一个地方都有对应的地址同样地,在计算机中我们把内存单元的编号也称为地址在C语言中我们称其为指针对于一个内存单元,其占一个字节,一个字节又是八个比......
  • Java基于SSM-SpringBoot+Vue的流浪动物救助系统(源码+文档+运行视频+讲解视频)
    所需该项目可以在最下面查看联系方式,为防止迷路可以收藏文章,以防后期找不到项目介绍Java基于SSM-SpringBoot+Vue的流浪动物救助系统(源码+文档+运行视频+讲解视频)系统实现截图技术栈介绍JDK版本:jdk1.8+编程语言:java框架支持:springboot数据库:mysql......
  • Spring中三级缓存详细讲解
    1、Spring三级缓存是什么,过程是怎么样的?Spring中的三级缓存主要用于单例Bean的生命周期管理,特别是在循环依赖时,它通过不同阶段暴露Bean实例来确保依赖注入的顺利完成。缓存的内容如下:一级缓存(singletonObjects):存储完全初始化的单例Bean。该缓存中存储的是已经完......
  • 比特c语言-创建技术博客
      创建技术博客一、C语言学习目标(一)基础语法掌握熟练掌握C语言的数据类型,包括整型、浮点型、字符型等,清楚不同数据类型的取值范围和使用场景。精通各种运算符,如算术运算符、关系运算符、逻辑运算符等,能够运用它们进行正确的表达式求值。理解并能灵活运用控制结构,像i......
  • c语言的基本类型及输入输出占位符
    基本类型c语言的基本类型:int【long、short、unsigned、signed(c90)】、char、float、double、_Bool【布尔值】、_complex、_Imaginary【复数和虚数】输入输出printf标志字符标志含义-转换的结果在字段内左对齐+有符号的转换结果总是以+或者-开始空格如果......
  • C语言小作业,基于C语言的图书检索
        输入n本图书名称,在图书中检索包含C语言的图书,并输出符合要求的图书名称。说明:n最大为100,图书名称最大长度为50。string.h中有strstr函数,strstr函数是一个字符串处理的函数,它的主要功能是在一个字符串中查找另一个字符串(子字符串)的首次出现位置。本题中可以调用它......
  • 基于django中医药数据可视化平台(源码+lw+部署文档+讲解),源码可白嫖!
    摘要时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,中医药管理平台当然不能排除在外。中医药数据可视化平台是在实际应用和软件工程的开发原理之上,运用Python语言、ECharts技术、爬虫技术以及Django框架进行开发,可以让用户实现在线......