c语言:整数与浮点数在内存中的存储方式

news2025/2/26 13:47:14

整数在内存中的存储:

在计算机内存中,整数通常以二进制形式存储。计算机使用一定数量的比特(bit)来表示整数,比如32位或64位。在存储整数时,计算机使用补码形式来表示负数,而使用原码形式来表示正数。整数的存储方式使得计算机能够进行加减乘除等运算。


浮点数在内存中的存储:

与整数不同,浮点数采用IEEE 754标准来存储。在内存中,浮点数由三个部分组成:符号位、指数位和尾数位。这种存储方式使得计算机能够表示小数和非常大或非常小的数字,但也带来了精度丢失的问题。


IEEE 754标准

IEEE 754标准定义了浮点数的存储格式,包括单精度浮点数(32位)和双精度浮点数(64位)。在这两种格式中,浮点数的存储结构都由三个部分组成:符号位、指数位和尾数位。

  1. 符号位:用于表示浮点数的正负,0表示正数,1表示负数。

  2. 指数位:用于表示浮点数的阶码(指数部分),指数位的长度决定了浮点数的表示范围。

  3. 尾数位:用于表示浮点数的尾数,尾数位的长度决定了浮点数的精度。

单精度浮点数(32位)

单精度浮点数采用32位来存储,其中1位用于符号位,8位用于指数位,23位用于尾数位。

符号位(1位) 指数位(8位) 尾数位(23位)

双精度浮点数(64位)

双精度浮点数采用64位来存储,其中1位用于符号位,11位用于指数位,52位用于尾数位。

符号位(1位) 指数位(11位) 尾数位(52位)

 

特别注意: 

当我们使用单精度浮点数(32位)来存储一个小数时,可能会出现精度丢失的情况。例如,让我们考虑存储十进制数 0.1 在单精度浮点数中的表示。

在十进制中,0.1 可以用有限位数准确表示,但在二进制中,0.1 是一个无限循环小数。因此,在单精度浮点数中,0.1 的精确表示是不可能的。

让我们看看单精度浮点数中存储 0.1 的近似表示:

首先,将 0.1 转换为二进制。0.1 的二进制表示是 0.00011001100110011001100110...,这是一个无限循环。

然后,根据单精度浮点数的格式,我们将其表示为科学计数法形式:1.100110011001100110011002 x 2^-4。

在单精度浮点数中,我们需要舍入到23位尾数。因此,最终存储的近似值是:

符号位:0(正数)
指数位:-4 + 127(偏移值,127是单精度浮点数的偏移量)
尾数位:10011001100110011001100

这个存储的近似值会导致精度丢失,因为实际的0.1在单精度浮点数中无法被精确表示。在进行浮点数运算时,这种精度丢失可能会积累导致不准确的结果。

举个例子:

#include <stdio.h>
#include <stdint.h>

int main() 
{
	float num = 0.1f; // 使用单精度浮点数表示0.1
	// 将浮点数的内存表示以十六进制打印出来
	uint32_t* ptr = (uint32_t*)&num;
	printf("0.1的内存表示为: 0x%08x\n", *ptr);

	return 0;
}

7faa5db4797b431e951d9d392bf81caf.png

 

#include <stdio.h>
#include <stdint.h>

int main() 
{
    float num = -27.25f; // 使用单精度浮点数表示-27.25

    // 将浮点数的内存表示以十六进制打印出来
    uint32_t* ptr = (uint32_t*)&num;
    printf("内存中的表示为: 0x%08x\n", *ptr);

    // 分别提取符号位、指数位和尾数位
    uint32_t sign = (*ptr >> 31) & 0x1;
    uint32_t exponent = (*ptr >> 23) & 0xFF;
    uint32_t mantissa = *ptr & 0x7FFFFF;

    printf("符号位: %d\n", sign);
    printf("指数位: 0x%x\n", exponent);
    printf("尾数位: 0x%x\n", mantissa);

    return 0;
}

63dff24654c942b498cdf9c017c1b914.png

符号位:1位
┌─────┬───────────────────────┬─────────────────────────────────────┐
|  S  |       指数位(E)      |              尾数位(M)              |
└─────┴───────────────────────┴─────────────────────────────────────┘
  31                       23                                  0

例如  1.5,

符号位:1位
┌─────┬───────────────────────┬─────────────────────────────────────┐
|  0  |       01111111        |       10000000000000000000000       |
└─────┴───────────────────────┴─────────────────────────────────────┘
  31                       23                                  0
  • 符号位(S):用于表示浮点数的正负,0表示正数,1表示负数。
  • 指数位(E):用于表示浮点数的指数部分,通过偏移(bias)来表示实际的指数值。
  • 尾数位(M):用于表示浮点数的尾数部分,包括小数点后面的数字。

 

9c390aaba26d4f8bb4f15b0a48dc4430.png

 

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

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

相关文章

canvas基础:绘制圆弧、圆形

canvas实例应用100 专栏提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。 canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重要的帮助。 文章目录 arc…

Python练习题(一)

&#x1f4d1;前言 本文主要是【Python】——Python练习题的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&am…

权限的树形列表展示——基于APEX FancyTree Select

select distinct (o.PERMISSION_ID) as id, --数据ido.PARENT_PERMISSION_ID as PARENT_ID, --父ido.PERMISSION_NAME as title, --显示的标题o.PERMISSION_ID as VALUE, --标题对应的值1 as TYPE,casewhen (select cou…

TwinCAT3一个PLC设备里多个程序工程之间通讯

目录 1、创建TwinCAT3工程&#xff0c;再分别创建两个PLC程序工程 2、PLC1工程中添加如下代码&#xff0c;然后编译重新生成PLC1工程 3、PLC2工程中添加如下代码&#xff0c;然后编译重新生成PLC2工程 4、变量关联 5、一个PLC运行多个PLC工程设置 7、工程下载链接 1、创建…

vscode 调试jlink

文章目录 软件使用说明1、启动GDB Server2、下载gdb3、vscode配置4、调试 软件 vscodejlink - (JLinkGDBServer.exe)gcc-arm-none-eabi-10-2020-q4-major (arm-none-eabi-gdb.exe) 使用说明 vscode通过TCP端口调用JLinkGDBServer通过jlink连接和操作设备&#xff0c;vscode不…

Matlab 加权均值质心计算(WMN)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 思路很简单,即将之前的均值中心,引入相关的权重函数(通常与距离有关),以此为每个点进行赋权,最后即可得到一个加权均值中心: 二、实现代码 %% ********<

Vue3+nuxt+ts项目引入高德地图API实现步骤

看了好多相关的文章都没有完全贴合选用Vue3nuxtts框架的&#xff0c;也不太靠谱&#xff0c;只好自己踩坑实现了 首先去高德开放平台用自己的账号申请一个key&#xff0c;位置如下&#xff0c;申请好后保存好生成的key 我们使用vuemap/vue-amap&#xff0c;一个高德地图2.0版本…

百度下拉词挖掘工具,百度下拉词挖掘获取软件

百度下拉词挖掘工具 百度下拉词挖掘工具&#xff0c;作为站长和SEO人员必备的工具之一&#xff0c;有着令人瞩目的功能。它能够追踪用户在百度搜索栏中输入关键词时&#xff0c;百度自动为用户推荐的下拉关键词。这一推荐不仅仅是用户搜索历史的体现&#xff0c;更是一种市场需…

电源需要考虑的因素

做产品的都离不开电源&#xff0c;产品出问题也首先检查供电是否正常。今天给大家分享的是做好一个电源需要考虑哪些因素。 一&#xff0e; 描述输入电压影响输出电压几个指标形式 1&#xff0e; 稳压系数 A&#xff0e;稳压系数&#xff1a;表示负载不变时&#xff0c;稳压电源…

docker搭建rabbitmq、配置延迟队列插件

消息队列的作用&#xff1a;消峰、解耦、异步 rabbitmq安装 查询 [rootlocalhost ~]# docker search rabbitmq安装 [rootlocalhost ~]# docker pull rabbitmq准备工作 创建文件夹&#xff1a;/usr/local/software/rabbitmq/data 运行容器 docker run -it \ --name rabbi…

Fabric:创建应用通道

搭建自定义网络可以参考文章&#xff1a; https://blog.csdn.net/yeshang_lady/article/details/134113296 1 创建通道 网络搭建完成之后&#xff0c;就可以开始创建通道了。Fabric V2.5.4中可以在不创建系统通道的情况下直接创建应用通道。 1.1 修改配置文件 先创建配置文…

2022-06-17 github 访问慢的解决办法 - 手动添加hosts

访问https://hosts.gitcdn.top/hosts.txt 将网页的全部内容粘贴到你电脑的hosts文件中 在系统中找到 hosts 文件 Window&#xff1a;C:\Windows\System32\drivers\etc\hosts 或 Linux&#xff1a;/etc/hosts

Apache Flink(五):Apache Flink快速入门 - 环境准备及入门案例

&#x1f3e1; 个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;加入大数据技术讨论群聊&#xff0c;获取更多大数据资料。 &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你大数据的个人空间-豹…

6-55.汽车类的继承

根据给定的汽车类vehicle&#xff08;包含的数据成员有车轮个数wheels和车重weight&#xff09;声明&#xff0c;完成其中成员函数的定义&#xff0c;之后再定义其派生类并完成测试。 小车类car是它的派生类&#xff0c;其中包含载人数passenger_load。每个类都有相关数据的输出…

AD23等间距拉线、布线的方法

U M 键进行多根走线&#xff0c; 多根走线想保持10个mil 我可以直接按table键,弹出Multi-Routing ponent&#xff0c;项的Bus Spadng输入框中填充10个mil&#xff0c;新走线产生10个mil的等间距 保持最小的一个规则&#xff0c;可以去到6mil线距。 在拉线操作过程中&#…

HuggingFace学习笔记--BitFit高效微调

1--BitFit高效微调 BitFit&#xff0c;全称是 bias-term fine-tuning&#xff0c;其高效微调只去微调带有 bias 的参数&#xff0c;其余参数全部固定&#xff1b; 2--实例代码 from datasets import load_from_disk from transformers import AutoTokenizer, AutoModelForCaus…

牛客算法题【HJ96 表示数字】golang实现

题目 HJ96 表示数字 golang实现 package mainimport ("fmt""unicode" )func main() {s : ""var s_o stringvar char_pre, r runefor {n, _ : fmt.Scan(&s)if n 0 {break} else {for _, r range s {if unicode.IsDigit(r) {if !unicode.…

Kubernetes技术与架构-策略

Kubernetes集群提供系统支持的策略&#xff0c;也提供开放接口给第三方定义的策略&#xff0c;这些策略用于可定义的配置文件或者Kubernetes集群的运行时环境&#xff0c;其中包括进程ID数量的申请与限制策略&#xff0c;服务器节点Node内的进程ID的数量限制策略&#xff0c;Po…

MySQL 临时数据空间不足导致SQL被killed 的问题与扩展

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;共1730人左右 1 2 3 4 5&#xff0…

网站有必要使用SSL证书吗

随着互联网的快速发展&#xff0c;网络安全问题也变得日益突出&#xff0c;SSL证书的作用日益凸显。 什么是SSL证书&#xff1f; SSL证书&#xff08;Secure Sockets Layer Certificate&#xff09;&#xff0c;也称为TLS证书&#xff08;Transport Layer Security Certifica…