广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言详细图解浮点型数据的存储实现
  • 532
分享到

C语言详细图解浮点型数据的存储实现

2024-04-02 19:04:59 532人浏览 八月长安
摘要

目录在引入知识之前,先来看一个案例,就知道了解浮点型数据存储的重要性与必要性。 举个例子: #define _CRT_SECURE_NO_WARNINGS 1 #include<

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

举个例子:

#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)根据国际标准IEEE(电子和电子工程协会)754,任意一个二进制浮点数V可以表示为下面的形式:

## (-1)^S * M * 2^E

## (-1)^S 表示符号位,当S=0时,V为正数;当S=1时,V为负数。

## M 表示有效数字,且1<=M<2

## 2^E表示指数位

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

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

IEEE 754规定对于任意一个浮点数V都可以表示成V=(-1)^s * M *2^E,那我们是不是只要知道S、M、E三个值就可以确定一个浮点数?事实上,C语言内存存储浮点数时,也确实是只存储S、和指数E有关的一个值、和M有关的一个值(注意,这里不是直接存E、M) 详情如下:

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

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

对于M与E的特别规定:

E的使用:

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

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

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

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

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

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

到此这篇关于C语言详细图解浮点型数据的存储实现的文章就介绍到这了,更多相关C语言数据存储内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言详细图解浮点型数据的存储实现

本文链接: https://www.lsjlt.com/news/148108.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言详细图解浮点型数据的存储实现
    目录在引入知识之前,先来看一个案例,就知道了解浮点型数据存储的重要性与必要性。 举个例子: #define _CRT_SECURE_NO_WARNINGS 1 #include<...
    99+
    2022-11-13
  • C语言数据的存储超详细讲解下篇浮点型在内存中的存取
    目录前言浮点型在内存中的存储浮点数存储的例子浮点数存储规则IEEE 754规定IEEE 754对有效数字M的特别规定IEEE 754对指数E的特别规定存入内存是E的规定从内存取出时E...
    99+
    2022-11-13
  • C语言详细分析浮点数在内存中的储存
    目录浮点数的储存格式初步了解深入探究E不全为0或不全为1E全为0E全为1浮点数的储存格式 初步了解 首先让我们通过一段代码来认识一下浮点型和整型的区别: int main() { ...
    99+
    2022-11-13
  • C语言数据(整数、浮点数)在内存中的存储
    本篇主要讨论:整数、浮点数在内存中是怎么保存的! 数据类型详细介绍 在前面C语言基础概览中,已经提到过了基本的C语言内置类型,但C语言的数据类型有无数种~ 但是可以把这些类型分为几个...
    99+
    2022-11-12
  • C语言浮点型数据在内存中的存储方式是什么
    本篇内容介绍了“C语言浮点型数据在内存中的存储方式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、思考一下咱们先上一盘开胃菜,试试看...
    99+
    2023-07-05
  • C语言数据的存储详解
    目录数据类型的介绍整形浮点型构造类型指针类型void空类型整数在内存中的存储原反补的介绍大小端的介绍面试例题练习浮点数在内存中的存储存储规则讲解举例IEEE754的特别规定案例flo...
    99+
    2022-11-12
  • C语言数据的存储超详细讲解上篇
    目录前言1、数据类型介绍类型的基本归类2、整形在内存中的存储2.1 原码、反码、补码2.2 大小端介绍2.2.1 什么是大小端2.2.2 大端和小端意义2.2.3 写程序判断字节序总...
    99+
    2022-11-13
  • C语言中数据的存储详解
    目录1.内置类型(1)整型数组(2)浮点型2.自定义类型3.指针类型4.空类型(void)字符型浮点型(一)(二)总结 数据的存储首先就要说到数据的类型,类型决定了看待内存空间的视角...
    99+
    2022-11-12
  • 详解C语言中数据的存储
    目录一、类型归类1、整形家族2、浮点型家族3、指针类型4、空类型二、类型的意义 三、数据在类型中存储(以整形和浮点型为例子)1. 关于 存储的基本概念2.存储模式四.应用1.2.对...
    99+
    2022-11-12
  • C语言数据的存储超详细讲解中篇练习
    目录前言数据的存储的知识点练习练习 1练习 2练习 3练习 4练习 5练习 6练习 7总结前言 本文继续学习数据在内存中存储的相关知识点。 数据存储整型提升 数据的存储的知识点练习 ...
    99+
    2022-11-13
  • C语言数据在内存中的存储详解
    目录文章摘要一、C语言的数据类型数据类型基本分为: 二、隐式类型转换1.什么是隐式类型转换2.整型提升 3.类型转换三、机器大小端1.什么是大小端2.大小端在截断的应用3....
    99+
    2022-11-12
  • c语言 数据存储与原码 反码 补码详细解析
    目录前言1.数据的类型介绍1.1整形家族2.整形在数据内存中的存储2.1 原码 反码和补码(三种整型数的表示方法)2.2大小端字节序序的介绍2.3 练习3.浮点型在内存中的存储3.1...
    99+
    2022-11-13
  • C语言数据的存储怎么实现
    这篇文章主要介绍“C语言数据的存储怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言数据的存储怎么实现”文章能帮助大家解决问题。1、数据类型介绍在基础阶段已经学习了基本的类型和存储空间的大...
    99+
    2023-06-30
  • C语言编程数据在内存中的存储详解
    目录变量在计算机中有三种表示方式,原码反码,补码原码反码补码总结一下浮点数在内存的储存C语言中,有几种基本内置类型。 int unsigned int signed int cha...
    99+
    2022-11-12
  • 关于C语言中数据在内存中的存储详解
    目录前言一、数据类型介绍1.类型的基本归类1.整形家族2.浮点型家族3.构造类型4.指针类型5.空类型二、整型在内存中的存储1.原码、反码、补码2.内存中怎样存储3.大小端字节序1....
    99+
    2022-11-12
  • C语言嵌入式实现支持浮点输出的printf示例详解
    目录简介背景C语言可变参数函数踩坑功能实现简介 mr-printf 模块为 mr-library 项目下的可裁剪模块,以C语言编写,可快速移植到各种平台(主要以嵌入式mcu为主)。...
    99+
    2023-01-30
    C语言嵌入式浮点输出printf C语言嵌入式printf
  • C语言详细讲解strcpystrcatstrcmp函数的模拟实现
    目录一、模拟实现strcpy函数二、模拟实现strcat函数三、模拟实现strcmp函数四、小结一、模拟实现strcpy函数 strcpy函数是字符串拷贝函数,就是将源字符串拷贝到目...
    99+
    2022-11-13
  • C语言超详细讲解猜数字游戏的实现
    目录rand函数srand函数时间戳完整代码与程序运行图rand函数 先看一下下面这张图: 通过这张图我们可以了解到rand函数的返回值是int类型,形参为空,它的头文件<s...
    99+
    2022-11-13
  • C语言多维数组数据结构的实现详解
    目录数据结构之多维数组各基本操作函数原型说明 各基本操作的具体实现测试分析思考与小结1、 对数组的再认识2、调试过程中遇到的问题及解决方案3、算法的时间复杂度分析总结数据结构之多维数...
    99+
    2022-11-12
  • C语言详尽图解函数栈帧的创建和销毁实现
    目录常见寄存器基本的汇编语言知识具体实现关于栈帧创建与销毁的问答题注:本文章所使用的编译器是VS2010,由于不同编译器的函数栈帧与销毁略有差异,所以具体细节请读者自行实践! 常见寄...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作