数据在内存中的存储1(C语言进阶)

这篇具有很好参考价值的文章主要介绍了数据在内存中的存储1(C语言进阶)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


❤️ 作者简介 :RO-BERRY 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识,对纯音乐有独特的喜爱
📗 日后方向 : 偏向于CPP开发以及大数据方向,如果你也感兴趣的话欢迎关注博主,期待更新



我们今天来学习数据在内存中的存储

1.数据类型介绍

前面我们已经学习了基本的内置类型:

char //字符数据类型 1个字节

short //短整型 2个字节

int //整形 4个字节

long //长整型 4/8个字节
C语言规定sizeof(long)>sizeof(int) 4/8没规定

long long //更长的整形 8个字节

float //单精度浮点数 4个字节

double //双精度浮点数 8个字节

1.1类型的基本归类:

整形家族

char
      unsigned char       signed char
short
      unsigned short      signed short
int 
      unsigned int        signed int
long
	  unsigned long       signed long

对于整形家族的类型来说,有有符号和无符号的区分
简易的来说:
我们的有符号(signed)是包含了正数以及负数,而我们在定义int时,一般是省略了前面的signed,C语言里面signed int = int;
我们的无符号(unsigned)是不包含负数的,他不等价于我们所说的int

我们再从内存的角度来看signed和unsigned的区分:
我们举例char来讲signed和unsigned的区分

数据在内存中的存储1(C语言进阶),c语言,开发语言
char为一个字节,也就是8个比特位,当它是signed的时候,8个比特位的第一位将是一个符号位,符号位规定(1表示为负数,0表示为正数);当是unsigned的时候,8个比特位都是数值位。
数值位的不同同时也造成了两个类型的范围不一样
数据在内存中的存储1(C语言进阶),c语言,开发语言

即unsigned char的范围为-128~127
signed char的范围为0~255

同理我们signed short和unsigned short的范围:

signed short : -32768~32767
unsigned short : 0~65535

为什么字符(char)会归类到我们的整型家庭呢?
因为字符存储的时候,存储的是ASCII码值,是整形,所以归类的时候放在整形家族

浮点数家族

float
double

构造类型

数组类型
结构体类型 struct
枚举类型 enum
联合类型 union

这几个类型都是我们自己将其创建,都是自定义类型

指针类型

数据在内存中的存储1(C语言进阶),c语言,开发语言

空类型

void 表示空类型(无类型)
通常应用于函数的返回类型,函数的参数

2.整形在内存中的存储

一个变量的创建是要在内存中开辟空间的。空间的大小是根据不同的类型而决定的。
那接下来我们谈谈数据在所开辟内存中到底是如何存储的?
比如:
int a = 20;
int b = -10;
我们知道为 a 分配四个字节的空间。
那如何存储?
我们来先了解下面的这个概念:

2.1 原码、反码、补码

计算机中的整数有三种2进制表示方法,即原码、反码和补码。
三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位
正数的原、反、补码都相同。
负整数的三种表示方法各不相同。

原码
直接将数值按照正负数的形式翻译成二进制就可以得到原码。
反码
将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码
反码+1就得到补码。

一个字节为8bit,一个整形就是4个字节也就是32比特位
数据在内存中的存储1(C语言进阶),c语言,开发语言
原码、反码、补码知识在计算机领域特别涉及,在课程计算机网络或者计算机组成原理中为必须知道的知识

对于整形来说:数据存放内存中其实存放的是补码。
为什么呢?
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统
一处理;
同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程
是相同的,不需要额外的硬件电路。
我们的数值在计算机中本质上都是用2进制来存储的,但在vs上为了方便展示,显示的是16进制
数据在内存中的存储1(C语言进阶),c语言,开发语言
数据在内存中的存储1(C语言进阶),c语言,开发语言

2.2 大小端介绍

什么是大端小端:
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中;
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。
数据在内存中的存储1(C语言进阶),c语言,开发语言

为什么有大端和小端:

为什么会有大小端模式之分呢?
这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8 bit。但是在C语言中除了8 bit的char之外,还有16 bit的short型,32 bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。
因此就导致了大端存储模式和小端存储模式。

例如:一个 16bit 的 short 型 x ,在内存中的地址为 0x0010 , x 的值为 0x1122 ,那么 0x11 为高字节, 0x22 为低字节。对于大端模式,就将 0x11 放在低地址中,即 0x0010 中, 0x22 放在高地址中,即 0x0011 中。小端模式,刚好相反。
我们常用的 X86 结构是小端模式,而 KEIL C51 则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

如何写一个程序来判断大端小端呢?
数据在内存中的存储1(C语言进阶),c语言,开发语言
int 型是4个字节,char型是1个字节,我们取a的地址然后强转成char类型的指针,我们char类型指针接受的就是那个int的第一个字节的地址,我们就可以通过第一个字节的内容来判断大端小端文章来源地址https://www.toymoban.com/news/detail-568043.html

到了这里,关于数据在内存中的存储1(C语言进阶)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【c语言进阶】深入挖掘数据在内存中的存储

    铁汁们,今天给大家分享一篇数组及详解冒泡排序,来吧,开造⛳️ 类型的 意义 : 类型是用来创建变量, 变量的创建需要在内存中开辟一块内存空间 ,用来存储变量的值, 类型的大小决定了开辟内存空间的大小 。 基本内置类型: c语言标准只规定sizeof(long)只要大于等于

    2024年02月08日
    浏览(60)
  • C语言进阶——数据在内存中的存储,你知道吗?

    之前我们涉及关于这一部分的知识只是大致的进行讲解,今天我们要把这个内容详细的讲解和总结。 在前面我们已经学习了基本的内置类型(内置类型就是语言自身定义的类型): char                //字符数据类型 short               //短整型 int                   //整形

    2024年02月02日
    浏览(36)
  • C进阶:数据在内存中的存储(2)

    在上一篇博文中,相信大家对于数据类型以及整数在内存中的存储有了一定了解,那么,浮点数是怎么在内存中存储的呢?下面来看一下我的讲解。 浮点数家族: 包括:float,double,long double类型。与limits.h相似, 浮点数也有限制范围的头文件float.h. 与limits.h相似,float.h也包括

    2024年02月11日
    浏览(36)
  • C进阶:数据在内存中的存储(1)

    大家好,感谢大家最近的支持,今天也是开始了C进阶一系列的博文的创作,欢迎大佬们来指点,欢迎来一起沟通!!! 我们都知道:C语言具有以下几种数据类型: 这里注意的是: sizeof(int) = sizeof(long), 在上述类型中,我们可以通过limits.h中的(MAX和MIN)获得类型的的最大值

    2024年02月06日
    浏览(34)
  • 【C进阶】深度剖析数据在内存中的存储

    目录 一、数据类型的介绍 1.类型的意义: 2.类型的基本分类 二、整形在内存中的存储 1.原码 反码 补码 2.大小端介绍 3.练习 三、浮点型在内存中的存储 1.一个例子   2.浮点数存储规则 前面我们已经学习了基本的内置类型以及他们所占存储空间的大小: char          //字符

    2024年02月10日
    浏览(37)
  • C语言——数据在内存中的存储

    本章重点 1. 数据类型详细介绍 2. 整形在内存中的存储:原码、反码、补码 3. 大小端字节序介绍及判断 4. 浮点型在内存中的存储解析 目录 1. 数据类型介绍 1.1 类型的基本归类 2. 整形在内存中的存储 2.1 原码、反码、补码 2.2 大小端介绍 2.3 练习 2.4 unsigned char 和 signed char的区别

    2024年02月08日
    浏览(39)
  • 【C语言】数据在内存中的存储

    什么叫做浮点数,就是有小数的数据就要浮点数,比如:5.5 6.5 9.0等一些数据就叫浮点数,那么浮点数又是怎么在内存中存放的呢,下面听我一一道来。 浮点型的家族包括:float double long double 我们以以下代码为例比较下浮点数和整型数据内存中的存储是如何的: 打印的结果

    2024年02月07日
    浏览(36)
  • C语言:数据在内存中的存储

    在讲解操作符的时候,我们就讲过了下⾯的内容: 整数的2进制表示方法有三种,即 原码、反码和补码 三种表示方法均有 符号位 和 数值位 两部分,符号位都是用0表示“正”,用1表示“负”,而数值位最高位的⼀位是被当做符号位,剩余的都是数值位。 正整数的原、反、

    2024年04月10日
    浏览(44)
  • <C语言> 数据在内存中的存储

    C语言中的基本内置类型如下: 类型的意义: 1.使用这个类型开辟内存空间的大小(大小决定了使用范围)。 2.如何看待内存空间的视角。 整型家族: 注意:char有些编译器没有规定是unsigned还是signed 浮点数家族: 构造类型: 指针类型: 空类型: void 表示空类型(无类型)

    2024年02月16日
    浏览(36)
  • c语言-数据在内存中的存储

    1.整数的2进制表示方法有三种,即 原码、反码和补码 2. 三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位最高位的一位是被当做符号位,剩余的都是数值位。 3. 存储时存储的是补码,取出的时取出的原码 如: 正负数的原码、反

    2024年02月04日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包