服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言修炼之路数据类型悟正法 解析存储定风魔上篇

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

2022-10-09 14:49玄澈_ C/C++

使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当您创建一个变量时,就会在内存中保留一些空间。您可能需要存储各种数据类型的信息,操作系统会根据变量的

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

 

(壹)数据类型介绍

前面我们已经学习了基本的内置类型,以及他们所占存储空间的大小。:

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

类型的意义:

  • 使用这个类型开辟内存空间的大小(大小决定了使用范围)。
  • 如何看待内存空间的视角。

1.1类型的基本归类

整形家族:

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

浮点数家族:

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

构造类型:

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

指针类型

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

空类型:

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

 

(贰)整形在内存中的存储

我们之前讲过一个变量的创建是要在内存中开辟空间的。

空间的大小是根据不同的类型而决定的。

那接下来我们谈谈数据在所开辟内存中到底是如何存储的?

比如:

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

我们知道为a分配四个字节的空间。 那如何存储?

2.1原码、反码、补码

计算机中的有符号数(整数)有三种表示方法,即原码、反码和补码。

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

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

2.2深入解析

正数的原、反、补码都相同。

对于整形来说:数据存放内存中其实存放的是补码。

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

为什么呢?

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

举例解析1:

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

举例解析2

了解一下计算机的底层概念,我们人脑可以很轻松的知道机器数的第一位是符号位,但对于计算机基础电路设计来说判别第一位是符号位是非常难和复杂的事情,为了让计算机底层设计更加简单,人们开始探索将符号位参与运算,并且采用只保留加法的方法,我们知道减去一个数,等于加上这个数的负数,即:1-1 = 1 + (-1) = 0,这样让计算机运算就更加简单了,并且也让符号位参与到运算中去。

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

因为补码能多存储一个-128,而且在计算机底层中存储的是补码,所以在计算机中一个8位的二进制数的存储范围是用补码表示的[-128,127],而不是用原码或反码表示的[-127,127]。这也可以解释为什么计算机中一个字节的取值范围是[-128,127]。

这样也能够回答我们开始提出的问题了,原码、反码、补码的使用,是人们为了让符号位能参与运算并让计算机底层运算更加简单而设计出来的数据存储表示方式。

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

C语言修炼之路数据类型悟正法 解析存储定风魔上篇

到此这篇关于C语言修炼之路数据类型悟正法 解析存储定风魔上篇的文章就介绍到这了,更多相关C语言 数据类型内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/forever_bryant/article/details/122995588

延伸 · 阅读

精彩推荐
  • C/C++c++获取进程信息列表和进程所调用的dll列表

    c++获取进程信息列表和进程所调用的dll列表

    这篇文章主要介绍了c++获取进程信息列表和进程所调用的dll列表,大家参考使用吧...

    C++教程网8012021-01-10
  • C/C++C++中的对象数组详细解析

    C++中的对象数组详细解析

    在建立数组时,同样要调用构造函数。如果有50个元素,就需要调用50次构造函数。在需要的时候,可以在定义数组时提供实参以实现初始化...

    C++教程网8902021-01-07
  • C/C++C++初始化列表学习

    C++初始化列表学习

    在C++中,struct和class的唯一区别是默认的克访问性不同,而这里我们不考虑访问性的问题,所以下面的代码都以struct来演示...

    C++教程网10172020-12-25
  • C/C++C语言实现五子棋小游戏

    C语言实现五子棋小游戏

    五子棋游戏是一款很经典的智力游戏,只有学过编程语言的人,把五子棋的编程原理弄懂了,就能用自己熟悉的语言实现出来,在这里给大家分享,c语言五...

    C语言教程网10122021-03-29
  • C/C++C语言数据结构之复杂链表的拷贝

    C语言数据结构之复杂链表的拷贝

    复杂链表指的是一个链表有若干个结点,每个结点有一个数据域用于存放数据,还有两个指针域,其中一个指向下一个节点,还有一个随机指向当前复杂链...

    i_Crave8872022-02-20
  • C/C++vscode配置C++环境的图文教程

    vscode配置C++环境的图文教程

    这篇文章主要介绍了vscode配置C++环境的教程图文详解,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要...

    hesorchen8132021-08-31
  • C/C++C语言矩阵连乘 (动态规划)详解

    C语言矩阵连乘 (动态规划)详解

    这篇文章主要介绍了C语言矩阵连乘 (动态规划)详解的相关资料,需要的朋友可以参考下...

    super_yc10082021-05-12
  • C/C++C++实现经典24点纸牌益智游戏

    C++实现经典24点纸牌益智游戏

    这篇文章主要介绍了C++实现经典24点纸牌益智游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    晴水如蓝11352021-08-21