数据的存储(1)数据类型,整型在内存中的存储

news2024/9/21 16:21:56

TIPS

1. 函数递归必须存在限制条件。

2. 一维数组与二维数组在内存当中是连续存放的,二维数组的话反正也是一行一行往下走。如果能知道起始地址的话,后面顺藤摸瓜会很容易。

3. 数组越界的话,C语言本身是不做检查的。数组传参传的是数组首元素的地址(地址,指针,内存编号三者概念完全等价),并不是把整个数组都传过去。因此如果想要知道数组元素数的话,必须要在外面用sizeof(arr)/sizeof(arr[0])算好,这个公式的话是不能在函数内部去算的。当然,计算字符数组的话也可以用strlen()

4. 指针变量的类型主要有两个意义。第一个意义在于决定了当对指针进行解引用操作的时候,势力范围是多少;还有一个意义在于决定了指针±整数的时候的步长大小

5. 符号位也要参与运算的,你以为你是符号位就这么表示着正负颐享天年了?做梦

6. 如果两个符号位都是1,不用慌,不用去忧虑什么符号位因为都是统一起来了的,该进位进位,该截断丢掉就截断丢掉

7. 内存里面的一切运算与存储都是补码,当然在屏幕上让你看到的还是要再转为原码,打印出原码对应的数值

8. 正数的原码反码补码一样

9. char类型的世界里只有-128~127,不可能超出这个范围,你放一个再大的值,也会因为发生截断而回归到这个范围里面(详见下文)

10. 把一个数据放到内存里面的时候,计算机是不知道到底是有没有符号的,是用的人去决定,我用%d,这就说明我认为它是有符号的;我用%u则反之。

11. 一切都是内存单元/一个字节,一切都是二进制,什么字符啊,各种其他乱七八糟的具像东西,计算机才不认识,计算机就认识二进制。

12. 数据类型不是说告诉你这里面到底该放什么东西?而是说我开辟了多少内存空间,至于里面放什么你管我,比如char类型,只说明我开辟了1个字节内存空间,至于里面才不字符呢,我放数字又咋了,而事实上,也只能放数字

13. 整型提升的规则就是:如果当前要提升数的是有符号的,那么就高位补符号位,如果是没有符号的,高位补0。(注意:这个看有没有符号,只看当前要提升的数是不是有符号的,千万千万不要被%u干扰,这个是整型提升完成之后,对结果再一次发生解读的变化),整型提升只有发生在整型运算时,比如单单看char的值用不着整型提升。

14. 

数据类型(整型,浮点数,构造类型,指针类型,空类型)

C语言中的内置数据类型我们之前也已经讲过,无非就是那么几种类型。那么问题就来了,为什么需要那么多数据类型呢? 

数据类型的作用 

1. 数据类型决定申请开辟的内存空间大小(字节)

2. 数据类型决定看待内存的视角(我认为内存里面放的是什么?继而影响我的解读方式

整型家族 

1. 那为什么字符类型char也会被归到整型家族里面去呢?因为字符在存储的时候存储的是ASCII码值,而ASCII码值是整数,所以在归类的时候,字符属于整型家族没有问题。而char又分为unsigned char与signed char,整型家族的每个数据类型都可以是有符号的或者无符号的。

2. 这边得稍微注意一下:比如说我写int num; / long num; 等,这些都是默认有符号的。而char的话如果你写char str; 这个char到底是默认有符号的还是无符号的这个是取决编译器的,在常见的编译器下,也默认有符号的。

浮点数家族 

  

构造类型(自定义类型)

1. 这个构造类型其实就是自定义类型

2. 数组类型也属于自定义类型,还有结构体类型struct,还有枚举类型enum,还有联合类型union。其实这些都是我们自己去创造出一个类型,比如说我定义“学生”这样一个类型。

3. 那数组类型为啥是自定义类型呢?比如说int arr[10],我这个数组arr它的类型实际上是int [10];如果我定义int arr[11],数组arr它的类型就是int [11],随着元素个数与元素类型的变化,数组的类型也在发生着变化。

指针类型 

空类型 

整型数据类型在内存中的存储

1. 数据类型的作用:数据类型决定申请开辟的内存空间大小(字节)决定看待内存的视角(我认为内存里面放的是什么?继而影响我的解读方式

二进制原码,反码,补码(只对于整型而言,浮点数没有这个的)

1. 计算机中的整数有三种二进制的表示方法:原码,反码,补码。这三种表示方法均有符号位,数值位两部分(都是有的,缺一不可能)。符号位都是用0表示正,用1表示负。

  

2. 对于正数而言,原码,反码,补码都是一模一样,没有任何区别很是省心;负数的话,三种表示方法各不相同,需要通过计算得到。

3. 有一点需要注意:电脑内存当储存的是二进制补码这个不假,但是在VS内存窗口上展示的时候,是用十六进制展示的(四个二进制位为一个十六进制位)。

4. 对于负数而言,它的原反补到底是怎么算的呢?首先的话还是得写出原码:


 

5. 我们已经知道,对于整形来说:数据存放内存中其实是在内存里面存放补码(正数的原反补一样,而负数的话需要通过计算),那么为什么存放的是补码呢?在计算机系统中,数据一律用补码来表示与存储,原因是:
     1. 使用补码,可以将符号位与数值域统一处理,也就是说我在进行计算的时候很省心,压根就不用去注意你的最高位是符号位还是数据位,直接统一处理无所谓,该怎么来就怎么来。
     2. 同时,加法和减法也可以统一处理(CPU只有加法器)
     3. 对于负数,补码原码互相转换,运算过程是一模一样的,不需要使用额外的硬件电路。

啥意思呢?举个例子:

unsigned 修饰 / %d / %u

1.  unsigned 修饰的时候内存里面的二进制补码不会发生任何变化,但计算机对它的解读会发生变化。变化在于:高位不是符号位了,而是老老实实乘以权重的数据位了,这时候如果要整型提升的时候,高位就补0

2. %d是打印 有符号 的 整数,它认为在内存里面存放的是一个有符号的整数,打印的时候,如果那个数据没有达到整型int的长度(4字节),就会发生整型提升,(顺便提一下:内存里面放的是补码,然后打印在屏幕上的话,需要先把它转化成原码,打印出原码所对应的数字,而且是先整型提升再转换为原码打印

3. %u是打印无符号的整数,如果有整型提升的话,区别就在于对整型提升完了之后的32位二进制补码的解读

注意:%d与%u打印时如果涉及到整型提升:
先根据原先的类型(有无符号)整型提升
再根据d/u解读整型提升后的结果,转换原码,打印原码的值

整型数据类型在内存的存储注意

1. 数据类型

     数据类型决定申请开辟的内存空间大小(字节),数据长度超出就截断

     决定看待内存的视角即:影响我的解读方式

2.  原/反/补

     补码符号位既表示±,也参与加减等运算 

     内存里存放,运算 -> 补码    注:十进制数运算与二进制补码运算吻合

     求值,打印 -> 转回原码               

3. unsigned 修饰/%d/%u 

      %d与%u打印根据原先的类型(有无符号)整型提升

4.  截断/加减进退位超长丢弃

     代码里面出现的整数 -> 32位的二进制补码

5.  整型提升 

     限于整型运算打印时,如:算char的值时就不需要整型提升,直接按8位二进制算

练习

1. 

答案:1 1 255

解析:

2. 

答案:

解析:

3.

答案:

解析:

4.

答案:

解析:

5. 

答案:

解析:

6. 

答案: 

解析:

7. 

答案:死循环

解析:

无符号的char的类型不可能超过255

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/138703.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【跟学C++】面向对象三大特征——继承(Study20)

文章目录1、了解继承2、基类与派生类(父类与子类)2.1、概念2.2、案例展示3、构造顺序与析构顺序4、继承种类4.1、私有继承4.2、保护继承4.3、多继承5、总结 【说明】 大家好,本专栏主要是跟学C内容,自己学习了这位博主【 AI菌】的【C21天养成计划】&…

十五、类加载器、反射

类加载器 1类加载器【理解】 作用 负责将.class文件(存储的物理文件)加载在到内存中 2类加载的过程【理解】 类加载时机 创建类的实例(对象)调用类的类方法访问类或者接口的类变量,或者为该类变量赋值使用反射方式来…

excel制表基础:规范的制表理念和思路让效率提升 下篇

在日常工作中我们会构建很多的表格,其实这些表格无论多少,都可以归结为三大类,分别为“源数据表”、“关系信息表”和“统计分析表”。上次我们提到了一套表格“统计的核心”——“源数据表”,今天继续为大家分享“关系信息表”和…

力扣(LeetCode)1802. 有界数组中指定下标处的最大值(C++)

贪心二分查找 贪心性质:对于数组中确定位置index的数,要使nums[index]最大,等于使得整个数组之和最小。 提示 :数组相邻元素之差的绝对值小于1,为了数组之和最小,从index往左,形成公差为1的递减…

python实现多张多格式图片转PDF并打包成exe

目录 主要思路 转PDF初始代码 转PDF最终代码 GUI界面设计代码 打包成可执行文件 完整代码 附录 主要思路 从文件夹中读取图片数据,然后将他们保存为PDF格式。 转PDF初始代码 不长,大概10行代码。 from PIL import Image from os import *def …

Stardust 案例:制作散景光斑

本文介绍使用 Ae 插件 Stardust 制作散景光斑的一般方法与步骤。效果视频1、新建合成。持续时间:10 秒。2、新建纯色图层,命名为“散景光斑”,然后添加 Stardust 效果。3、设置 Emitter(发射器) 。用一个长方形的发射器…

2023外贸人出国抢单攻略(附带2023年全球重要展会)

自11月底以来,全国陆续传来政府带团出国抢单的消息,让沉寂了3年之久的外贸行业热情高涨。这不仅预示着3年抗疫斗争的胜利,更意味着中国三驾马车之一的外贸行业开启了高速运转的车轮。“浙江带领万家企业去欧洲抢单!”“福建省商务…

少儿Python每日一题(10):手机键盘

原题解答 本次的题目如下所示(原题出处:NOC) 一般的手机的键盘是这样的: 要按出英文字母就必须要按数字键多下。例如要按出 x 就得按 9 两下,第一下会出 w,而第二下会把 w 变成 x。0 键按一下会出一个空格。 你的任务是读取若干句只包含英文小写字母和空格的句子,求出要…

装备制造业ERP软件如何帮助企业做好物料齐套管理?

在生产制造过程中,要想提高生产效率,齐套管理是很重要的一环,会直接影响库存、交付和效率。而装备制造行业原料种类特别多,通用件也非常多,齐套检查工作十分复杂,深受以下问题困扰:1.装备制造业…

springmvc源码之HandlerMapping处理器映射器

系列文章目录 springmvc源码之Web上下文初始化 springmvc源码之DispatcherServlet前端控制器 springmvc源码之HandlerMapping处理器映射器 文章目录系列文章目录HandlerMapping处理器映射器实现类配置mvc:annotation-driven配置的作用RequestMappingHandlerMapping源码创建访问…

JAVA SpringBlade 微服务开发平台框架,企业级的SaaS多租户微服务平台,基于Spring Boot 2.7

SpringBlade微服务开发平台 完整代码下载地址:JAVA SpringBlade 微服务开发平台框架,企业级的SaaS多租户微服务平台 采用前后端分离的模式,前端开源两个框架:Sword (基于 React、Ant Design)、Saber (基于 Vue、Element-UI)后端采用SpringCloud全家桶&…

【谷粒商城基础篇】前端开发基础知识

谷粒商城笔记合集 分布式基础篇分布式高级篇高可用集群篇简介&环境搭建项目简介与分布式概念(第一、二章)基础环境搭建(第三章)整合SpringCloud整合SpringCloud、SpringCloud alibaba(第四、五章)前端知…

Unity-ROS2与URDF导入(三)

0. 简介 在我们上一章讲的对于Unity与ROS之间的通信&#xff0c;Toolbox等比较基础的指令。下面我们将结合代码来介绍一下如何导入URDF文件&#xff0c;并通过键盘完成Unity的控制。 1. URDF模型创建 首先先创建并编辑URDF文件&#xff0c;并命名为toio_style.urdf <?x…

Python(九)Tornado web 框架

一、简介 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像web.py 或者 Google 的 webapp&#xff0c;不过为了能有效利用非阻塞式服务器环境&#xff0c;这个 Web 框架还包含了一些相关有用工具及优化。 Tornado 和…

LeetCode:13. 罗马数字转整数

13. 罗马数字转整数1&#xff09;题目2&#xff09;思路3&#xff09;代码4&#xff09;结果1&#xff09;题目 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V …

【自学Java】Java switch语句

Java switch语句 Java switch语句教程 在 Java 语言 中如果遇到多选一的场景&#xff0c;可以使用 switch 将其简化&#xff0c;让程序更加简洁易懂。switch 语句可以被 if…else 代替。它里面包含 switch、case、default 和 break 关键字。 switch 中存放的是对应的被比较的…

题402.数位dp-acwing-1082. 数字游戏1083. Windy数1085. 不要62

文章目录题402.数位dp-acwing-1082. 数字游戏一、题目二、题解三、类似题目四、关于数位dp题402.数位dp-acwing-1082. 数字游戏 一、题目 二、题解 欲求区间[X,Y]中满足性质的数的个数&#xff0c;我们可以想着去求小于m的数中满足性质的个数f(m)&#xff0c;然后利用前缀和思…

WebDAV之葫芦儿·派盘+FX播放器

FX播放器 支持WebDAV方式连接葫芦儿派盘。 想要把手机、PC、NAS等设备上的视频在智能电视上大屏播放,支持超多格式的多合一视频播放器?快来试试FX播放器吧。 FX播放器除了存储在智能手机上的视频外,您网络上的视频也是实时无缝的࿰

关于TCP通信的学习和应用案例

记录学习TCP通信的过程&#xff0c;包括理论知识、在Qt中建立TCP服务端和客户端&#xff0c;并附上源代码。由于最近的项目中也使用到了海康VisionMaster软件&#xff0c;可以将其作为服务端&#xff0c;用Qt写的TCP客户端和其进行通信测试&#xff0c;方便调试。 目录1.关于TC…

MATLAB APP 设计实践(一)UART通信(上篇)

引言UART通信属于异步串行通信&#xff0c;通信速率比较低&#xff0c;在一些速度要求不高的场合常用来作为多设备之间的控制与被控制方式。例如以UART串口通信作为上位机侧与运行设备之间的通信形式&#xff0c;实现上位机对设备的操控以及检测设备运行状态等。那么谈到了上位…