深度剖析数据在内存中的存储

本文详细介绍了数据类型,尤其是整形在内存中的存储方式,包括原码、反码、补码的概念,以及大小端字节序的判断。通过对有符号和无符号整数的讨论,解释了数据在内存中以补码形式存储的原因,并通过实例展示了数据截断和整型提升的过程。文章还提及了在不同场景下,如使用%d和%u打印数据时的差异,以及有符号数与无符号数计算的细节。此外,文章还探讨了数据在内存中的实际存储情况,并通过练习加深读者对概念的理解。
摘要由CSDN通过智能技术生成

下面先介绍一下这章要让大家了解的基本内容:

一.数据类型详细介绍

二.整形在内存中的存储:原码、反码、补码

三.大小端字节序介绍及判断

四.浮点型在内存中的存储解析

一.数据类型详细介绍

首先我们先简单介绍一下基本数据类型,想必大家已经了解过一些基本的内置类型:

例如:

char     字符数据类型    (占用 1 个字节)
short 短整型                (占用 2 个字节)
int 整形                    (占用 4 个字节)
long 长整形                (占用 4 个或者 8 个字节)
long long 更长的整形         (占用 8 个字节)
float 单精度浮点型     (占用 4 个字节)
double 双精度浮点型     (占用 8 个字节)

类型的意义:

1.使用这个类型开辟内存空间的大小(大小决定了使用范围)。

2.如何看待内存空间的视角

我们对数据类型进行了简单的分类:

整形家族:


 

常规写法 完整写法 表示的数据范围
char  signed char (有符号的 char)  -128 ~ 127
unsigned char unsigned char(无符号的 char)   0 ~ 255 
short  signed short(有符号的 short)  -32768 ~ 32767
unsigned short unsigned short (无符号的 short)  0 ~ 65535 
int  signed  int(有符号的 int)  -2147483648~2147483647
unsigned int unsigned int(无符号的 int) 0 ~ 4294967295
long signed long(有符号的 long)  -2147483648~2147483647
unsigned long unsigned long(无符号的long) 0 ~ 4294967295


注意:1,我们通常写的int 等价于 signed int,其他整形类型同理。

2.char 也在整形家族中, 虽然char是字符类型,但是字符类型在存储的时候,存储的是字符的 ASCII 码值,ASCII码值是整数。

3.例如在char c1这个字符型变量中;char到底是有符号还是无符号其实是不确定的,这取决于编译器,不过大多数的编译器都是吧char当做signed char。

看到这里,有的小伙伴就开始疑惑了,什么是有符号signed ? 什么是无符号unsigned呢?

有符号与无符号讲解:

在说有符号和无符号之前,先给大家举个例子:

比如:温度,温度是有正负的,比如零下15度表示为 -15℃,零上20表示为20℃,像这种有正负的数据可以存放在有符号的变量中

例如:生活中人的年龄只有正数,没有负数,像这种只有正数的数据可以存放在无符号的变量中。

知道这个例子后我们先提一个问题:

如果需要表示的整数大于了 int 能表示的最大值怎么办?

我们可以用short 和 int 来回答这个问题。

-- short能表示的最大值为:32767,如果short 能表示的最大值加1会得到什么?

--int 能表示的最大值为:2147483647,如果int能表示的最大值加1会得到什么?

下面我们用代码找答案:

 注意:这样的错误写法不会让程序奔溃,仅仅运行结果很奇怪。

不要急,我们继续往下看:

-- short能表示的最小值为:-32768,如果short 能表示的最小值减1会得到什么?

--int 能表示的最小值为:-2147483648,如果int能表示的最小值减1会得到什么?

下面我们用代码找答案:

结论:所以我们从以上两个例子的结果可以得出如果越界就会发生回转,最大值加一就会回转到最小值,最小值减一就会回转到最大值。

有符号与无符号

--signed int和 unsigned int所能表示的整数个数是一样的,仅仅是最大值和最小值不同,例如:

signed int 的范围:-2147483648 ~ 2147283647

unsigned int 的范围:0 ~ 4294967295

二.整形在内存中的存储:原码、反码、补码

 计算机的整数有三种表示方法,即原码、反码、补码

三种表示方法均有符号位数值位两部分:符号位都是 0 表示“正”,符号位是1 表示“负”,而数值位负整数的三种表示方法不同。

整数可以写出三种二进制表示形式:原码、反码、补码。

首先用正整数10举个例子

从以上代码可以得出结论:正整数的原码、反码、补码相同

在此基础上接下来我们用负整数-10来举个例子进行对比:

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值