整数和浮点数在内存中的存储

C语言基础知识总结(一)整型、浮点型数据在内存中的存储 C语言基础类型的基本介绍及归类,整型浮点型在内存中的存储,原码、反码、补码,大小端。 阅读详情

一、整数

1.1整型数据的分类

1.1.1基本整型(int)

类型名为int

在C99中,整型数据占4个字节(32个二进制位)。

1.1.2短整型(short int)

类型名为short int 或 short。

在C99中,编译系统分配给短整型2个字节。存储方式与int相同。

1.1.3长整型(long int)

类型名为long int 或 long。

在C99中,编译系统分配给短整型4个字节。存储方式与int相同。

1.1.4双长整型(long long int)

类型名为long long int 或 long long。

在C99中,编译系统分配给短整型8个字节。存储方式与int相同。

1.2整型数据在内存中的存储

整型数据在内存中是以补码的形式存放的。

正数的补码即为此数的二进制形式,如3的二进制形式是0011,如果用四个字节存放一个整数,则在存储单元中的数据形式为:

0000 0000  0000 0000  0000 0000  0000 0011

最高位符号位为0,表示为正数。正数的原码、反码、补码都相同。

负数的补码为此数的绝对值写成二进制形式后再取反+1,如-5的绝对值5的二进制形式为0101,则原码为:

1000 0000  0000 0000  0000 0000  0000 0101

反码(最高位符号位为1,不变,其余取反):

1111 1111  1111 1111  1111 1111  1111 1010

+1:

1111 1111  1111 1111  1111 1111  1111 1011

上面的二进制形式即为-5在存储单元中的形式。

1.3整型变量的范围和符号属性

上面介绍的几种整型类型的变量值在存储单元中都是以补码形式存放的,存储单元中的第一个比特位表示符号位,所以整型变量的值的范围包括负数到正数。

例如int的范围为:

最大数为:0111 1111  1111 1111  1111 1111 1111

最小数为:1000 0000  0000 0000  0000 0000  0000 0000

在实际应用中有的数据范围只需要正数,为了充分利用变量的值的范围,可以将变量定义为“无符号”类型,在类型符号前加上修饰符unsigned即可。

例如:

unsigned int//无符号整型
unsigned char//无符号字符型

一旦声明为无符号unsigned类型,表示的范围就扩大一倍。如:int的取值范围变为0~2^32-1。 

二、浮点数

2.1浮点型数据的分类

浮点型数据是用来表示具有小数点的实数的。在C语言中,实数是以指数形式存放在存储单元中的。

2.1.1单精度浮点型(float)

编译系统为每一个float类型变量分配4个字节。数值以规范的二进制数指数形式存放在存储单元中。在存储时,系统将实型数据分成小数部分和指数部分分别存放。

2.1.2双精度浮点型(double)

编译系统为每一个double类型变量分配8个字节。

2.1.3长双精度型(long double)

不同的编译系统对该类型的处理方法不同。

在VS 2022中使用的是MSVC编译器,为该类型分配8个字节。

2.2浮点型数据在内存中的存储

在计算机中存储浮点型数据时,小数部分用二进制表示,指数部分用2的幂次表示。

根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数V可以表示为:

  1. 当S为0时表示V为正数,当S为1是表示V为负数;
  2. M表示有效数字,并且满足大于等于1小于2;
  3. 2^E表示指数位 

 例如:

十进制的-5.0,写成二进制为-101.0,根据国际标准可以表示为:-1.01*2^2。也就是S=1,M=1.01,E=2。

在存储单元中,对于float类型的数据来说,共有32个比特位表示,最高位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M。

不过,在计算机内部保存M时,由于M(1.xxxxxxxx)的第一位总是默认为1,因此可以被省去,只保存(.xxxxxxxx)部分,读取时再加上1。这样做可以节省一位有效数字。

对于指数E,它是一个无符号整数。所以如果E为8位,那么它可以表示的数为0~255。

但是,在科学计数法中是允许出现负数的,所以根据规定,存入E时要加上中间数,对于8位的E,这个中间数位127。例如,2^10代表E=10,在保存成32位的浮点数时应存入10+127=137(1000 1001)。

2.3浮点数的读取

2.3.1E不全为0或1

举例:假设一个单精度浮点数的二进制表示为:

0 10000001 10100000000000000000000

  1. 符号位 S = 0(正数)
  2. 指数 E = 10000001(二进制) = 129(十进制)
  3. 尾数 M = 10100000000000000000000(去掉隐含的1,实际为1.101)

指数计算: 实际指数=129−127=2实际指数=129−127=2

浮点数值计算: value=(−1)^0×1.101×2^2=1.625×4=6.5

2.3.2E全为0

value=(−1)^S×0.M×2^(1−偏移量)

要注意的是,有效数字M不再加上1,E的计算也有所不同

举例:

0 00000000 01000000000000000000000

  1. 符号位 S = 0(正数)
  2. 指数 E = 00000000(二进制) = 0(十进制)
  3. 尾数 M = 01000000000000000000000(去掉隐含的1,实际为0.01)

指数计算: 实际指数=1−127=−126实际指数=1−127=−126

浮点数值计算: value=(−1)^0×0.01×2^(−126)=0.01×2^(−126)=1×2^(−128)=2^(−128)

所以,这个浮点数表示的值是非常接近于零的一个小数。

2.3.3E全为1

当指数位全为1时,浮点数表示的是无穷大(Infinity)或非数字(NaN)。

假设一个单精度浮点数的二进制表示为:

0 11111111 00000000000000000000000

  1. 符号位 S = 0(正数)
  2. 指数 E = 11111111(二进制) = 255(十进制)
  3. 尾数 M = 00000000000000000000000

当指数位全为1且尾数位全为0时,这表示正无穷大。

假设一个单精度浮点数的二进制表示为:

0 11111111 10000000000000000000000

  1. 符号位 S = 0(正数)
  2. 指数 E = 11111111(二进制) = 255(十进制)
  3. 尾数 M = 10000000000000000000000

当指数位全为1且尾数位不全为0时,这表示非数字NaN(Not a Number)。

【部署】OpenClaw版本降级实操(含全量卸载) 本文详细介绍了OpenClaw工具的降级与卸载方法。主要内容包括:1)通过npm安装指定版本的核心命令及国内镜像加速方案;2)两种卸载路径:CLI工具存在时的简易一键卸载(含交互式与非交互式命令)和手动分步卸载流程;3)CLI已删除但服务仍在运行时,针对macOS(launchd)、Linux(systemd)和Windows(计划任务)系统的具体清理步骤。文章特别强调了卸载前备份的重要性,并提供了不同安装方式(常规安装与源码克隆)的额外说明,确保用户能彻底清理所有组件。 阅读详情

相关推荐

Arduino IDE 2配置ESP32-S3工程全指南

嵌入式开发中,Arduino框架通过硬件抽象层(HAL)大幅降低MCU入门门槛,其核心在于板级支持包(BSP)与底层构建系统(如ESP-IDF)的精准协同。理解CPU频率、Flash模式、分区表、PSRAM等关键配置,本质是掌握SoC时钟树、SPI Flash通信协议、内存映射与FreeRTOS调度机制的技术原理。这些参数不仅决定固件能否启动,更直接影响功耗、实时性、OTA升级与大容量应用(如LVGL、TFLite Micro)的可行性。本文以ESP32-S3为例,聚焦Arduino IDE 2.x环境下从

root9的博客 781

浮点型数据在内存中是如何存储的

浮点型数据在内存中是如何存储的 对于32位的浮点数,最高位是符号位s,接着的8位是指数E,剩下的23位为有效数字M, 对于64位的浮点数,最高位是符号位S,接着的11位是指数E,剩下的52位为有效数字M

weixin_44057803的博客 1012

智能车竞赛蚂蚁搬家组:NXP-MicroPython与STC单片机协同搬运策略解析

本文深入解析智能车竞赛蚂蚁搬家组中NXP-MicroPython与STC单片机的协同搬运策略。通过硬件选型、通信架构设计、效率优化及实战经验分享,展示了如何利用NXP-MicroPython的实时控制与STC单片机的感知导航优势,实现高效多智能体协同作业,为参赛团队提供实用技术参考。

motor的博客 1079

C语言 小数点在内存中的存储

但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE754规定,存⼊内存时E的真实值必须再加上⼀个中间数,对于8位的E,这个中间数是127;因为1<=M<2的 所以可以写成1.xxxxx的形式 IEEE754规定计算机在保存M的值时,总是省略1只保留小数点等读取的时候再把1加上去 目的是为了节省空间 让更多的空间留给M。对于32位的float,最高的一位存符号S,接着8为存E, 剩下的23位存有效数字M。比如2.5 他的二进制为0010.1 小数点后面的1代表的是2^-1;

2301_81739147的博客 426

中国区ASP服务性规范考试

10、每次现场维护服务,工程师需按照400要求达到现场的时间与客户联系,在抵达现场、故障恢复后两个时间点分别向400报CALL ,如与客户联系变更到现场时间点,也需向400电话备案(400-822-9999)……20、工程师小B 在接到客户故障申报后赶到客户现场,发现问题无法解决,于是及时将情况反馈至技术支持响应工程师小C ,小B 就和小C 协商由小C 远程解决此问题,后小B 离开客户现场。18、小L 到客户现场交付安装服务。6、EPMS 中上载初验证书的命名规则为:合同号+初验的客户签署日期……

2301_76197693的博客 1906

FOC实战笔记:RC吸收电路的设计考量与参数调优

本文深入探讨了FOC驱动器中RC吸收电路的设计与调优。针对MOS管开关过程中的电压尖峰问题,详细阐述了RC电路的钳位与能量吸收原理,并提供了从参数计算、实验调试到布局布线的完整实战指南,旨在帮助工程师有效提升系统可靠性与稳定性。

weixin_29219539的博客 273

【C语言】整数和浮点数在内存中的存储

今天我们来讲一下整数和浮点数在内存中的存储方式以及大小端字节序的判断以及了解什么叫大小端,下面就一起来看看吧。

2301_81044829的博客 1628

Pcileech(DMA)开源项目简述

希望大DMA家能正确认识FPGA,正确使用DMA技术,对于市场上各类伪装成花里胡哨设备的FPGA板卡它的本质是不会变的,不要上当受骗。

2301_79773847的博客 5960

关于整数和浮点数在内存中的存储

整数浮点数在内存中的存储

favour_you___的博客 1780

【机器学习】一文搞懂算法模型之:Transformer

必会算法模型之:Transformer

商务合作 | 面试培训 | 职场规划 ==>主页扫码 5608

Raspberry Pi 4 ARM Trusted Firmware 技术解析

摘要: 本文详细介绍了在树莓派4(Raspberry Pi 4)上移植ARM可信固件(TF-A)的实现方案与安全考量。该移植专注于BL31功能,作为非安全世界(如Linux内核)的启动桥梁,支持加载EL2级别程序。文章分析了启动流程、内存映射设计,并对比了RPi3与RPi4的关键差异,指出当前版本缺乏硬件级安全内存保护的局限性。此外,提供了构建指南、配置说明及设备树自动修补的实现细节,强调通过config.txt简单配置即可启动64位内核。该方案充分利用树莓派原有GPU固件流程,兼顾兼容性与简易性。

Linux内核架构师 932

关于整数和浮点数在内存中的存储的总结

以上便是整数和浮点数在内存中的存储问题,这里面的知识点不难,只是需要记很多东西,建议忘记的时候就反复拿出来复习,强化自己对于数据类型的理解能力和内功。

hbw040115的博客 544

整数和浮点数在内存中的存储模式

说起整数和浮点数,大家一定不会陌生。什么是整数和浮点数呢?就是。就是。那么整数和浮点数在内存中又是怎样存储的呢?存储方式是否相同呢?想知道后续如何,请接着往下看~

2302_77644537的博客 1134

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 自定义类型:结构体
下一篇: 文件处理的基本操作
Jett_Lin
博客等级 码龄5年 305粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值