C语言中整型和浮点型在内存中的存储方式

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

1.整型在内存中的存储

整数的二进制表示方法有三种:原码,反码,补码

正整数的原,反,补码都是相同的
负整数的三种表示方法各不相同

比如拿-1举例(在32位机器上):

int a=-1;
//10000000 00000000 00000000 00000001//原码
//11111111 11111111 11111111 11111110//反码
//11111111 11111111 11111111 11111111//补码

对于整型来说,数据存放在内存中其实存放的是补码

2.大小端的判断

#include <stdio.h>
int main()
{
	int a=0x11223344;
	
	return 0;
}

在这里插入图片描述
我们可以看见a在内存中是倒着存储的,这是为什么呢?其实这就是小端存储

2.1 什么是大小端存储?

  • 大端(存储)模式:

是指数据的低位字节内容保存在内存的高地址处,而数据的高位字节内容,保存在内存的低地址处

  • 小端(存储)模式:

是指数据的低位字节内容保存在内存的低地址处,而数据的高位字节内容,保存在内容的高地址处

用代码实现判断一个机器是大端存储还是小端存储:
在这里插入图片描述

3.浮点型在内存中的存储

首先我们先来看一段代码:

#include <stdio.h>
int main()
{
	int n = 9;
	float* pFloat = (float*)&n;
	printf("n的值为:%d\n", n);
	printf("*pFloat的值为:%f\n", *pFloat);
	*pFloat = 9.0;
	printf("num的值为:%d\n", n);
	printf("*pFloat的值为:%f\n", *pFloat);
	return 0;
}

大家能否知道输出的结果是什么?
相信大多数人都会认为输出9 9.0 9 9.0
其实真正输出的是:
在这里插入图片描述
是不是觉得大吃一惊,其实如果我们要理解这个结果,就需要搞清楚浮点数在计算机内部的表示方法。
在这里插入图片描述
举例来说:
十进制5.0,写成二进制是101.0,相当于1.01*2^2
那么我们可以得出S=0,M=1.01,E=2

IEEE 754规定:

  • 对于32位的浮点数,最高的1位存储符号S,接着的8位存储指数E,剩下的23位存储有效数字M
  • 对于64位的浮点数,最高1位存储符号S,接着的11位存储指数E,剩下的52位存储有效数字M
    在这里插入图片描述
    在这里插入图片描述
    对于指数E,情况就比较复杂:
    首先,E是一个无符号整数
    意味着,如果E是8位,它的取值范围0 ~ 255;如果E为11位,它的取值范围0 ~ 2047。但是我们知道科学计数法中的E是可以出现负数的,所以 IEEE 754 规定,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023.

指数E从内存中取出还可以分为三种情况:

  • E不全为0或不全为1
    这时,浮点数就采用下面的规则表示,即指数E的计算值减去127(或1023),就得到真实值,再将有效数字M前加上第一位的1.
    比如:0.5的二进制形式为0.1,由于规定正数部分必须为1,所以将小数点右移1位,则位1.0*2^(-1),则S=0,M=1.0,E=-1+127=126.其二进制表示形式
//0 01111110 00000000000000000000000
  • E全为0
    表示±0,很接近于0的很小的数字.这是浮点数的指数E等于1-127(或1-1023)即为真实值。
  • E全为1
    表示±无穷大

3.1题目解析

好了,了解了浮点数在内存中的存储规则,下面我们来解析下我们刚刚那道代码题:

#include <stdio.h>
int main()
{
	int n = 9;
	//00000000 00000000 00000000 00001001
	float* pFloat = (float*)&n;
	//&n原本是int*类型的,现在强制类型转换成float*
	//0 00000000 00000000000000000001001
	//S=0,E=0,M=00000000000000000001001
	//(-1)^0*00000000000000000001001*2^(-126)  这是一个很小很小的数,又由于浮点数(float)只有6位小数部分,所以最后结果0.000000
	printf("n的值为:%d\n", n);//9
	printf("*pFloat的值为:%f\n", *pFloat);//0.000000
	*pFloat = 9.0;
	//9.0   1001.0==(-1)^0*1.001*2^3
	//S=0,E=3+127=130,M=1.001
	//0 10000010 00100000000000000000000
	printf("num的值为:%d\n", n);//0 10000010 00100000000000000000000这个转化成十进制将是非常大是数字 1091567616
	printf("*pFloat的值为:%f\n", *pFloat);//9.0
	return 0;
}
数据在内存中的储存·大小端(文字+画图详解)(c语言·超详细入门必看) 数据在内存中的储存·大小端详细介绍·C语言必看 阅读详情

相关推荐

【c】数据的存储

【c】数据的存储

m0_65030571的博客 9883

【C语言】整型和浮点型在内存中的存储方式

你真的了解数据在计算机中的存储方式吗?还不快来???!!!

m0_74452600的博客 362

CMake接口库实战:如何用add_library的INTERFACE选项管理跨项目依赖

本文深入探讨了CMake中add_library的INTERFACE选项在管理跨项目依赖时的实战应用。通过创建不包含源代码的接口库,开发者可以集中管理头文件路径、编译定义、链接库等公共配置,并将其声明式地传递给依赖目标。文章以构建模块化跨平台网络应用为例,详细展示了如何利用接口库实现配置的集中化、依赖关系的显式化,从而提升大型项目的可维护性和可移植性。

water的专栏 1039

c语言中整型数据在内存中的存储形式,c语言中浮点型和整型数在内存中的存储方式...

在学习C语言的过程中,有时候会想,数据到底是以什么样的方式在内存中存储的呢?经过一段时间的查阅资料,小编终于整理了一些……以VC6.0编译器为测试环境(int型为4Byte)先简介一下大小端模式,具体资料可参考这是小编看过的最详细的一篇讲解了……简介一下:大端模式:Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端小端模式:Little-Endian就是低位字节排放...

weixin_36024106的博客 2459

maxwell 平面变压器仿真(一)

在学习开关电源设计的时候,我们难免要设计变压器,采用有限元仿真软件MAXWELL 可以帮助我们确定变压器的励磁电感,漏感等参数。对于我们的理论分析大有裨益。但是苦于这破软件的教程真的是相当的零散,我相信大家用起来也总是苦于没有系统的教程指导,撰写本文的目的有两个,一个是记录自己使用的一些问题,一个是给大家提供一个可以参考的文档。

qq_45405656的博客 8243

别再硬编码了!WinCC子画面动态加载的5种C脚本写法对比

本文深入解析WinCC子画面动态加载的5种C脚本实现方案,包括基础加载、路径动态解析、多语言切换、窗口自适应布局和混合架构交互。通过代码示例和场景分析,帮助开发者避免硬编码问题,提升工业自动化系统的交互效率和可维护性。特别推荐路径动态解析方案,有效解决项目路径管理的痛点。

weixin_29008691的博客 475

C语言学习——整型和浮点型数据在内存中的存储方式、大小端存储字节序讲解

整型和浮点型数据在内存中的存储方式、大小端存储字节序讲解

m0_70030457的博客 3004

使用安卓的IMU数据进行 行人航位推算(PDR)推算步长 附python 代码

加速度计数据、陀螺仪数据、重力传感器数据、姿态仰角数据。数据分析与定位轨迹生成主要使用Python离线完成。示意图。

三维点云技术探索 1912

【C语言】整型,浮点型在内存中的存储

深度剖析数据在内存中的存储, 数据类型详细介绍,整形在内存中的存储:原码、反码、补码,大小端字节序介绍及判断,浮点型在内存中的存储解析

林宇恒的博客 2275

yolov11添加P2小目标检测头与添加P6超大目标检测头

本文介绍了YOLO目标检测模型中上下采样的原理及应用。上采样通过插值算法放大特征图,YOLO通常采用最近邻插值;下采样则通过带步长的卷积缩小特征图提取高层语义特征。文章详细阐述了这两种操作在YOLO中的实现方式、结构特点及对称性问题,指出下采样后会使用C3模块进行特征整合,上采样后通过concat抑制分割感。此外,还分析了不同分辨率特征图适合检测不同尺寸目标的原因,并提出添加4倍小目标检测头的方法,即对上采样后的特征进行concat和C3模块处理。最后给出了YOLOv5原模型结构和添加4倍检测头后的结构对比

m0_64661770的博客 820

CAN总线入门(硬件部分)

这篇博客讲述CAN总线入门知识。

记得诚 1万+

整型变量和浮点型变量在内存中的存储

整型是一种数据类型,用来表示整数。整型数据可以是正数、负数或零,没有小数部分。浮点型(float)是一种表示小数的数据类型,用于存储包含小数部分的数字。与整数类型不同,浮点型可以表示带有小数点的数值,包括正数、负数和零。大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中。小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。

喜羊羊的博客 1491

华为OD机考双机位C卷 - 斗地主之顺子 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 斗地主之顺子(OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 9692

C中整形、浮点型数据在内存中的存储方式以及简明阐述计算机中的存储单位

超级详细的整形与浮点型数据在内存中的存储方式,引入存储单位便于新手理解!

ZGX_2005的博客 7342

STM32F407中文手册

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【C语言】浮点型的存储方式

让你对内存中的浮点型数据存储不在迷茫,变得清晰可见。

qq_27183803的博客 1082

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C-整型数据和浮点型数据在内存中存储

整型和浮点型的存储、大端小端存储

weixin_47207479的博客 1141

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C语言——内存中数据存储的详解(整型与浮点型)

char //字符类型 short //短整型 int //整型 long //长整型 long long //更长的长整型 float //单精度浮点型 double //双精度浮点型补充:long在当前VS2019的x86环境下为4个字节,而在当前VS2019的x64的环境下是8个字节。数据类型存在的意义:数据类型决定了该类型定义变量时,变量的取值范围大小(所占内存的空间大小,单位是字节)。以上就是我对整型数据和浮点型数据在内存中存储的全部总结。

sinzz的博客 1419

整型和浮点型的存储方式

本文简要介绍以下c语言中整型和浮点型的存储方式 1.整型 1.1 源码、反码、补码 源码就是一个数的二进制表示.第一位表示符号位,负数为1,正数为0。 反码是源码的符号位不变,其余为取反。 补码就是反码加1。 举个例子。数字5转换为二进制 源码 0000 0000 0000 ...

xd6905的博客 601

C语言中整型、浮点型在内存中的存储

C语言中有很多的数据类型,包括整型、浮点型等类型,这篇文章就是从内存出发,来分析整型数据和浮点型数据如何在内存中进行存储的。

nbbskk的博客 592

【C语言】深度剖析数据在内存中的存储

我们已经学习了基本的内置类型char //字符数据类型short //短整型int //整型long //长整型long long //更长的整型float //单精度浮点型double //双精度浮点型//C语言中没有字符串类型他们所占的存储空间大小.特别注意的是long>=int类型的意义使用这个类型开辟内存空间的大小(大小决定了使用范围)如何看待内存空间的视角.什么是大端小端大端(存储)模式:是指数据的低位保存在内存中的高地址中,而数据的高位,保存在内存的低地址中。...

qq_63474430的博客 877

【C语言进阶】身为程序员,你真的了解内存中数据的存储方式吗

经过了一整天的歇息,不知道各位小伙伴们做好准备了吗?从今天开始我们就将进入到更加深层次的进阶C语言部分相关知识的学习中了。今天我们要学习的内容是:深度剖析数据在内存中的存储。

weixin_59392935的博客 1002

【C语言】理解数据在内存中的存储(详解)

常见的数据类型介绍、整型和浮点型在内存中的存储、原码反码和补码之间如何转换、大小端存储方式的不同等数据在内存中的存储相关知识。 数据类型所占存储空间的大小char1个字节short2个字节int4个字节longlong long8个字节char之所以被归为整型是因为在存储的时候存放的是ASCII码值。char类型又可以分为和,单独用char定义的时候不确定是无符号还是有符号,所以根据需求直接写或者是。short可以分为和,定义short的时候默认为。

不 良的博客 1212

一文让你快速了解【数据存储--->整型、浮点型】!

char //字符数据类型 —>在内存中占1个字节short //短整型 —>在内存中占2个字节int //整形 —>在内存中占4个字节long //长整型 —>在内存中占4个字节long long //更长的整形 —>在内存中占8个字节float //单精度浮点数 —>在内存中占4个字节double //双精度浮点数 —>在内存中占8个字节。...

hero_jy的博客 3449

数据类型及其存储方式(C语言详解)

数据类型及其存储方式数据类型整型家族浮点型家族构造类型指针类型空类型数据的存储整型存储原码、反码、补码大小端存储模式浮点数存储 在c语言中数据类型基本可分为:整型家族、浮点型家族、构造类型、指针类型和空类型。下面主要详细介绍整型和浮点型在内存中是如何存储的。 数据类型 整型家族 整型家族成员有: char----unsigned char、signed char short----unsigned short、signed short int----unsigned int、signed int long

潘潘的博客 5006

C语言基础——让我用短短几分钟就让你了解数据是怎样在内存中存储的

文章目录一、数据类型的介绍1.整型2.浮点型3.构造类型4.指针类型5.空类型二、整型数据在内存中的存储2.1 原码、反码、补码2.2 计算机的大小端存储2.3 整型提升与截断三、浮点数数据在内存中的存储 一、数据类型的介绍 谈到数据的类型,我们就会想到我们用过的最多的整型和浮点型,就以这两个数据类型为例,我们知道在计算机内存中的整数与小数不像在现实生活中可以无限大,它们的大小往往都是受制约的,比如 int 类型只能占4个字节,double 类型只能占8个字节等等。可以说,具体的类型开辟了存储空间的大

Pinksatrfish的博客 2694
上一篇: C语言---内存函数
下一篇: C语言结构体
Tangcan-
博客等级 码龄3年 664粉丝 91原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值