数据的存储与输入输出

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5(十进制)→101(二进制)前面补0
0
0
0
0
0
1
0
1
-5(十进制)
先求对应的正整数的二进制,也就是5的二进制,为101(二进制)
然后所有位取反,末尾加1→010+1→011
前面位数不够,左边补1
1
1
1
1
1
0
1
1
接下来我们来由给出的补码求其十进制数
第一个:00000101
因为首位是0,代表是一个正整数,普通方法求即可
(具体用法如下图)
⑦十进制与八进制与十六进制之间的转换
十进制转八进制或者十六进制有两种方法
第一:间接法—把十进制转成二进制,然后再由二进制转成八进制或者十六进制。这里不再做图片用法解释。
第二:直接法—把十进制转八进制或者十六进制按照除8或者16取余,直到商为0为止。
(具体用法如下图)
八进制或者十六进制转成十进制
二进制转十进制
方法为:把二进制数按权展开、相加即得十进制数。
(具体用法如下图)
⑤二进制与八进制之间的转换
二进制转八进制
方法为:3位二进制数按权展开相加得到1位八进制数。(注意事项,3位二进制转成八进制是从右到左开始转换,不足时补0)。
(具体用法如下图)
八进制转成二进制
方法为:八进制数通过除2取余法,得到二进制数,对每个八进制为3个二进制,不足时在最左边补零。
9.数据类型
如果我要存储一个65,那么我们计算机是怎么区分这是数字的65还是字符A呢?事实上这个时候就需要我们提前告诉计算机我们要存储的数据类型。
数据类型不同,所占字节数也就不同,所占字节数不同,取值范围也就自然不一样。
注意点:在不同的编译器和硬件平台上,基本数据类型的大小以及能够表示的数据范围可能是不相同的。
这样子就解决了我们正整数在内存中的存储问题。但是在我们的生活中,除了正数,还有负数,那么负数又是怎么存储的呢?我们同样拿一个字节来举例子。
如果是一个有符号数,也就是正负数,那么就拿最高位来当作符号位。0表示正数,1表示负数。这样的话就少了一位来存数字,所以取值范围变为了-128~127。
如果超出了怎么办?超出了的话,就会又重新回到相反状态的最大值。例如我给给一个128,输出来的值会是-127,给一个-129,输出的值会是127。这里涉及到了补码的相关知识。
64位编译系统:int占4字节,long占8字节,long数据范围变为:-2^63~2^63-1
10.常量
常量,简单的解释,就是程序中有些数据是不会改变的,我们就称它为常量。事实这种不会改变的数据,也分为了多种类型。
如果按照大块来分的话,可以分为字面量和符号常量这两个大块,其中字面量又可以分为如下很多小块。
(具体用法如下图)
⑥二进制与十六进制之间的转换
二进制转十六进制
方法为:与二进制转八进制方法近似,八进制是取三合一,十六进制是取四合一。(注意事项,4位二进制转成十六进制是从右到左开始转换,不足时补0)。
(具体用法如下图)
十六进制转二进制
方法为:十六进制数通过除2取余法,得到二进制数,对每个十六进制为4个二进制,不足时在最左边补零。
4.内存
在介绍数字的存储之前,我们要先来看一个东西,内存。事实上,随着大家以后编写程序的深入,大家会发现,我们编写程序的时候,最多的就是和内存打交道。
大家都知道,我们的CPU就是计算机的大脑,所有的数据处理都是在CPU里面进行的。但是,CPU在进行数据处理之前,总得有数据传到它那里,它才能进行处理吧,而究竟哪个部件负责将数据传给CPU呢?那就是内存。也就是说,我们的CPU总是从内存里面读取数据并进行操作的。比如说你要播放硬盘上的一部电影,那也是先将硬盘上的电影传入到了内存,然后再由我们的CPU进行操作的。
1
1
1
1
加1之后变为:
1
0
0
0
0
0
0
0
这个时候,由于首位为1,所以会被解释为一个负数,按照刚才的转化方法:取反末尾加1得到该负数的绝对值
10000000取反→01111111
01111111末尾加1→10000000→128(这是该负数的绝对值)→ -128
7.实数的存储
我们现实生活中除了整数,当然还有小数,数学里把小数称之为实数。
例如,下面的数是合法的八进制整数
01/*十进制为1*/
0377/*十进制为255*/
0177777/*十进制为65535*/
下面的数不是合法的八进制整数
255/*无前缀0*/
-01/*出现了负号*/
028/*八进制中没有8*/
③十六进制
十六进制就是逢十六进一。由0~9和A~F共16个数字组成。在C语言中,十六进制数以0x开头。
方法为:把八进制、十六进制数按权展开、相加即得十进制数。
(具体用法如下图)
⑧十六进制与八进制之间的转换
八进制与十六进制之间的转换有两种方法
第一种:他们之间的转换可以先转成二进制然后再相互转换。
第二种:他们之间的转换可以先转成十进制然后再相互转换。
6.整数的存储
了解了内存和进制之后,我们接下来就可以看一下数字在内存中是怎么存储的了。
第3章_数据的存储与输入输出
1.什么是数据?
首先我们来看一看什么是数据?
简单的来讲,数据就是有用的信息。例如,一首歌,一部电影,一篇文章,一个数字,这些都是数据。
2.数据与数据类型
接下来我们来看一看什么是数据类型?
数据类型就是对数据的分类。
3.数据存储
那我们的数据究竟是怎样存储到计算机里面的呢?电影,歌曲那些我们先不管,我们先来看一下最基本的数,我们一起来研究一下平时生活中最常见的数字是怎么存储到计算机里面的。在学习数字在计算机里面怎么存储之前,我们需要先了解两个知识点,那就是内存和进制。
也就是说,例如我要将大写的A存储到计算机里面,事实上是存储的一个数字。我们通过上面的表可以看到,A对应的十进制数字是65。也就是说,计算机里面同样的一段二进制代码,根据你的解码不同得到的结果也就不同。如果你按照数字来解码,那么这就是一个数字65,如果你要解码为一个字符,那么它就是A。
后来计算机从美国传到了欧洲,再从欧洲传到了亚洲,显然ASCII码表是不够用的。所以多了很多其他的编码表。
例如下面的数都是合法的十六进制数:
0x1/*十进制为1*/
0xFF/*十进制为255*/
0xFFFF/*十进制为65535*/
④二进制与十进制之间的转换
十进制转二进制
方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。
(具体用法如下图)
但是以下5点在任何计算机平台上都是正确的:
char的大小为一个字节。
short的长度不会超过long。
int的长度不会超过long。
unsigned int的长度等于int。
float的长度不会超过double。
补充知识:为什么int和long都是占4个字节,取值范围也一样。
早期的操作系统是16位系统:
内存里面有很多个单元格,每个格子称之为一位,每一个格子,也就是说每一位,可以存储一个0或者一个1。位(bit)是我们内存的最小存储单位。最早的CPU是8位CPU,一次性从内存中读取8个格子,也就是8位。所以我们把8位又称之为一个字节(byte),字节是我们内存的基本存储单位。
5.进制和进制转换
数据在我们的计算机中是以二进制的形式来表示的。在C语言中,整型常量通常还以八进制,十进制和十六进制3种方式来表示的。
8.字符的存储
在我们的生活中,除了数字还有文字。因为计算机是美国人发明的,所以最早只研究了英语中的26个字母怎么存储到计算机。
在计算机系统中保留一个字节的长度来表示常用的128个字母,将一个数据存储在一个字节中,这个0-127之间的数字用来表示常用的英文字符。
美国国家标准协会定义了一个ASCII码表,专门来表示计算机中字节存储的0-127之间的数字所对应的英文字符。
C语言中的浮点数就是平常我们所说的实数。在C语言中,浮点数有两种表示形式:十进制小数形式和指数形式。
(1)十进制小数形式:由0-9和小数点组成
例如:0.0,25.0,5.789,0.13,5.0,300.,-267.823,.123等都是合法的实数。
注意点:必须要有小数点
(2)指数形式:由十进制数加阶码标志e或者E以及阶码(只能为整数,可以带符号)组成。
例如:2.1E5(等价于2.1*105)
3.7E-2(等价于3.7*10-2)
-2.8E-2(等价于-2.8*10-2)
以下几个实数是不合法的:
345(无小数点)
E7(E前面没有数字)
-5(既没有小数点也没有E)
53.-E3(负号的位置不对)
2.7E(E后面没有内容)
标准C允许浮点数使用后缀f或者F,来表示该数是一个浮点数。例如356f和356.是等价的。
例如:
'a'属于字符型常量用单引号括起来,"a"属于字符串常量用双引号括起来。
其次'a'占一个字节,"a"占两个字节。
字符串常量除了每个字符各占一个字节外,其字符串结束符'\0'也要占一个字节。
④符号常量
在C语言中,可以用一个标识符(复习前面标识符内容)来表示一个常量,说白了就是给常量去一个名字,以后只要输入这个名字就可以使用这个常量。
第二个:11111011
因为首位是1,所以表明是一个负整数,将所有位取反,变为00000100,末尾加1变为00000101,换算成十进制就是5,然后该数字就是该负数的绝对值。
●有了这个知识点以后,就可以解释为什么在127的基础上加1就变成了-128了。
127这个数字在计算机中存储的形式为:
0
1
1
1
②字符型常量
简单来讲,就是一个字符,然后用单引号把它包裹起来
‘x’‘b’‘$’‘?’‘3’‘B’‘’
字符型常量还有一个知识点,那就是转义字符,这个有点类似于我们前面学习HTML时学习到的特殊字符。
\n
换行符
\t
水平制表符
\’
单引号
\”
双引号
\\
反斜杠
③字符串常量
字符串常量说白了就是>=两个字符,用双引号括起来
② 负整数的二进制
先求该负数对应的正整数的二进制代码,然后所有位取反,末尾加1,不够位数时,左边补1。
●已知补码,求其十进制数
① Biblioteka Baidu果首位是0,则代表的是正整数,按普通方法求。
② 如果首位是1,则表明是负整数,将所有位取反,末尾加1,所的数字就是该负数的绝对值。
举例:求5和-5的补码,在通过补码返回去求十进制数值
int用2字节表示,范围是-32768~32767;
long用4字节表示,范围是-2147483648~2147483647。
后来发展到32位操作系统:
int用4字节表示,与long相同。
目前的操作系统已发展到64位操作系统,但因程序编译工艺的不同,两者表现出不同的差别:
32位编译系统:int占4字节,与long相同。
①二进制
什么叫做二进制,简单的说,就是逢二进一,目前的计算机全部都是采用的二进制系统。二进制中只有0和1,没有2这个数。为什么采用二进制呢?因为我们的二进制中每一位数都可以用任何具有两个稳定状态的元件来表示,所以二进制易于用电子方式来实现。
②八进制
逢八进一,所以没有8这个数字。八进制整常数必须以0开头作为八进制数的前缀。比如04,017等。八进制数通常是无符号数。
字面量
数值常量
整型常量
实型常量
字符常量
字符型常量
字符串常量
符号常量
#define标识符常量
①数值常量
首先我们来看数值常量,数值常量中分为整型常量和实型常量。虽然感觉很专业,但是事实上很简单,整型常量就是整数,当然这其中包含了正整数和负整数。而实型常量就是我们通常说的小数。
实型常量和前面的实数表示方法一样,分为有小数形式和指数形式。
定义的形式为:
#define标识符常量
注意符号常量首先是写在预处理命令下面,然后就是没有分号,没有分号,没有分号,重要的事说三遍!
我们知道,所有的数据都是以二进制的形式存储在计算机当中的。一个位可以存放一个0或者一个1。那我们先来看一下一个字节能够存放的最大正整数。
如上图所示,一个字节有8位,每一位都是1的时候代表的是这个字节的最大值,也就是255。
每一位都是0的时候,就是这个字节的最小值,也就是0。
但是我们生活中的数字很多都是大于255的,这个时候怎么办呢?这也很简单,一个字节装不下,我们就再拿一个字节来装,就像装西瓜一样,一个箱子装不下,就再拿一个箱子来放。如下图:
补充知识:补码。
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理;正0和负0也得到统一。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
补码的计算:
●已知十进制求补码
① 正整数的二进制
除2取余,直至商为0,余数倒序排序,不够位数时,左边补0。
相关文档
最新文档