C语言修炼之路数据类型悟正法 解析存储定风魔上篇
(壹) 数据类型介绍
前面我们已经学习了基本的内置类型,以及他们所占存储空间的大小。:
类型的意义:
- 使用这个类型开辟内存空间的大小(大小决定了使用范围)。
- 如何看待内存空间的视角。
1.1 类型的基本归类
整形家族:
浮点数家族:
构造类型:
指针类型
空类型:
(贰)整形在内存中的存储
我们之前讲过一个变量的创建是要在内存中开辟空间的。
空间的大小是根据不同的类型而决定的。
那接下来我们谈谈数据在所开辟内存中到底是如何存储的?
比如:
我们知道为a分配四个字节的空间。 那如何存储?
2.1 原码、反码、补码
计算机中的有符号数(整数)有三种表示方法,即原码、反码和补码。
三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位三种表示方法各不相同。
2.2 深入解析
正数的原、反、补码都相同。
对于整形来说:数据存放内存中其实存放的是补码。
为什么呢?
举例解析1:
举例解析2
了解一下计算机的底层概念,我们人脑可以很轻松的知道机器数的第一位是符号位,但对于计算机基础电路设计来说判别第一位是符号位是非常难和复杂的事情,为了让计算机底层设计更加简单,人们开始探索将符号位参与运算,并且采用只保留加法的方法,我们知道减去一个数,等于加上这个数的负数,即:1-1 = 1 + (-1) = 0,这样让计算机运算就更加简单了,并且也让符号位参与到运算中去。
因为补码能多存储一个-128,而且在计算机底层中存储的是补码,所以在计算机中一个8位的二进制数的存储范围是用补码表示的[-128,127],而不是用原码或反码表示的[-127,127]。这也可以解释为什么计算机中一个字节的取值范围是[-128,127]。
这样也能够回答我们开始提出的问题了,原码、反码、补码的使用,是人们为了让符号位能参与运算并让计算机底层运算更加简单而设计出来的数据存储表示方式。