数据内存在C语言中的存储-创新互联

目录

成都创新互联公司是专业的定远网站建设公司,定远接单;提供成都做网站、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行定远网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

前言

一.C语言的基本数据类型介绍

  1.1整形家族

​编辑

1.2浮点型家族

  1.3指针类型

  1.4构造类型

  1.5空类型void 

二.整形在内存中的存储

2.1原码,反码,补码

  2.2大小端的介绍

三. 浮点数的存储

3.1举一个例子

3.2浮点数存储规则

3.3解释例题

四.结语:


前言

新年的第一篇博客,记录一下新一年的学习8。

大家都知道数据在计算机中是用二进制进行存储的,一个字节由8位二进制数组成。那数据在C语言存储的细节是怎么样的呢?这篇文章就带大家讨论这个问题。

一.C语言的基本数据类型介绍         1.1整形家族

在windows64位系统中,long long 占8个字节,long占4个字节,int占4个字节,short占2个字节,char占1个字节。

为什么要把char归入整形家族呢?因为字符数据在c语言中本质储存的ASCII码,而ASCII码是整数,所以存储方式与整数一致。

1.2浮点型家族

在windows64位系统中,float占4个字节,double占8个字节。

  1.3指针类型

指针类型(当然指针类型不只这些,这里没有列举完) ,在64位系统下占8个字节,32位系统下占4个字节。

  1.4构造类型

这些类型的存储要根据内部的数据类型计算,这里就不做详细描述

  1.5空类型void 

void表示无类型(空类型)。

通常应用于函数的返回类型、函数的参数、指针类型。
二.整形在内存中的存储         2.1原码,反码,补码

什么是原码呢?

原码就是整数直接转换成二进制后形成的二进制序列。如下图所示。

因为a是int类型,int类型由4个字节组成,所以它转换成二进制后的源码应该由32位二进制组成。

在C语言的规定中,正整数的原码、反码、补码是相同的。

PS:它是怎么知道正负的呢?在c语言中,数据的原码首位字符代表正负(0为正,-1为负)。

看完了正数的原反补,现在我们来看负数。

负数的原码与整数一样,都是由数字转化为二进制得到,与正数不同的是,它的第一位是1,也就是符号位为1。

它的反码怎么得来呢?

负数的反码由原码转化而来,规则是:符号位不变,其他位依次按位取反得到。补码则是反码加一得到。

但是数据中为什么要存在原码、反码、补码呢?

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统 一处理; 同时,加法和减法也可以统一处理( CPU 只有加法器 )此外,补码与原码相互转换,其运算过程 是相同的,不需要额外的硬件电路。 原因如下图所示:

我们也可以验证一下,我这里查看的是VS2022中的内存存储。

但是我们看到内存存储的顺序又存在一些问题,它好像是倒着存储的。

这又是什么原因呢? 

  2.2大小端的介绍

什么是大小端:

大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址 中; 小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位 , ,保存在内存的高地 址中。

PS:0x就是十六进制的意思。

这里我们可以看到数据的存储是倒着存的。

这里的11是低位数据存在低地址处,44是高位数据存在高地址处。

便于记忆可以简单的理解为,小端是倒着存,大端是正着存。

三. 浮点数的存储 3.1举一个例子

为什么会出现这样的情况呢?

3.2浮点数存储规则 根据国际标准 IEEE (电气和电子工程协会) 754 ,任意一个二进制浮点数 V 可以表示成下面的形式: (-1)^S * M * 2^E PS: (-1)^S 表示符号位,当 S=0 , V 为正数;当 S=1 , V 为负数。 M 表示有效数字,大于等于 1 ,小于 2 。 2^E 表示指数位。 这个是什么意思呢? 这里举个例子比如5.5可以表示为:(-1)^0*1.011*2^2 这个算式怎么的出来的呢? 首先把5.5转化为二进制101.1 再转化成科学计数法表示也就是1.011*2^2

IEEE 754对有效数字M和指数E,还有一些特别规定 

因为在浮点数中M永远都是大于等于1小于2的,所以E最前面的1没有必要存储,这样可以多一位精度。

至于指数 E ,情况就比较复杂。 首先, E 为一个无符号整数( unsigned int ) 这意味着,如果 E 为 8 位,它的取值范围为 0~255 ;如果 E 为 11 位,它的取值范围为 0~2047 。但是,我们 知道,科学计数法中的E 是可以出 现负数的,所以 IEEE 754 规定,存入内存时 E 的真实值必须再加上一个中间数,对于 8 位的 E ,这个中间数 127;对于 11 位的 E ,这个中间 数是 1023 。比如, 2^10 的 E 是 10 ,所以保存成 32 位浮点数时,必须保存成 10+127=137 ,即 10001001 。 也就说在存储E时要加上127再进行存储。 其次就是E如果为全1或者全0

如果E为全一为无穷大(正无穷与负无穷),如果E为全0代表无穷小(无限接近于0)

如果E中有1也有0,那就正常计算即可。

3.3解释例题

四.结语:

数据的存储就讲完了,如果有哪里讲的不严谨,欢迎大家来讨论。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧

文章名称:数据内存在C语言中的存储-创新互联
浏览路径:https://www.cdcxhl.com/article2/hhgic.html

成都网站建设公司_创新互联,为您提供营销型网站建设外贸网站建设品牌网站制作做网站品牌网站设计品牌网站建设

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都做网站