问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

计算机存储数据的方式

创作时间:
作者:
@小白创作中心

计算机存储数据的方式

引用
1
来源
1.
https://www.cnblogs.com/WuGu/articles/18226837

在计算机中,无论是哪一种语言,存储的方式都是相同的。

首先说明问题:

计算机把未处理好的数据以及处理好的数据存储在哪里呢?

答:存储在存储器中。首先输入设备将数据输入进去,并且计算机将它放在内存中,然后控制器将这些数据传到运算器中,接着运算器又将这些数据回控制器,最后控制器才会将这些数据输出。

计算器中内存的方式

那么如果向操作系统申请空间,操作系统会给你一块地址,然而这块地址它是一连串的十六进制,每次想使用这个地址都要输入这么长的数字,而且这么多个数字,我每次申请他都随机给一个数字,这样就很复杂

所以我们就有了常量和变量的概念;

  • 常量:程序运行期间存储单元数据不会变化。
  • 变量:程序运行期间存储单元数据会变化。
  • 量:存储器中的存储单元
  • 变/常:存储器中的存储数据的状态

    对于ASCII码中有一些不能表示的字符,比如回车,那么就有了规定,

\

这个符号位转义字符,出现了这个符号那么接下来的其他符号也有特殊含义,就比如(注意这些都是字符

\0
就是空字符的含义,字符串的结束符

\r
回车字符

\t
制表符,也就是table键

\n
换行符
还有一些专门表示其他的特殊含义,如何表示八进制和十六进制,答案就是他们都有各自的前导符

  • 表示八进制
    0
    ,只要在数字前面加一个0,那么系统就是自动认为他是八进制,就比如
    0123
  • 表示十六进制
    0x0X
    ,这数字前面加0xor0X,那么系统就会认为他是十六进制,但是前面的x是小写的话,那么后面十六进制也要小写,反之X是大写那么后面的十六进制也要大写。
  • 表示十进制,数字就是默认的

计算机存放不同类型的数据

对于数据类型定义的变量,我们可以定义正数和负数,我们想要存储负数也是要和电脑说明的,就比如要加关键字
signed
有符号,只不过在定义变量的时候,操作系统默认认为他是有符号,即使你不说。那么
unsigned
就是无符号,但是在定义想要无符号的数需要加上关键字。

那么有符号和无符号有什么区别呢?
有符号可以表示负数,无符号不能表示负数。就拿
char
型来举例子。

//一般情况默认就是无符号
char ch ; <==> signed char ch;

在有符号的情况下,char型变量是1个字节也就是8位,但是想要让计算机分清楚这是正负数就可以用一个符号位。
所以就定义了最高位为符号位,(0表示正,1表示负),但是用了符号位就会少一位只剩下7位表示数据,范围也就变成了1111 1111---0111 1111,也就是-127--127,但是他会出现1000 0000 ,两个零。所以就把这个定义为-128。所以他的范围就变成了-128-127。
以此类推,有符号的short型,的范围就是-32768--32767。
在无符号的情况下那就比较简单了,全部位数都用来表示数据

unsigned char ch;
//定义需要加上关键字。
//表示的范围也就是0--255
unsigned short a;
//范围值0--65535

但是在计算机中,存放数据就是这样放进去的吗?
答案是不是的,计算机存放的数据都是先转换成补码在放进存储单元中。
正数的原码=反码=补码。
负数的原码,符号位不变其余位取反(0-->1,1-->0)变成反码,然后在加一变成补码。例如

/*
*-25   					1001 1001   这是25的原码
*符号位不变取反其余取反	 1110 0110	这是反码
*最后+1			   	   1110 0111  这是补码
*/

然而存数据的顺序是先转后放
顾名思义就是先转换成补码再放进去。

char ch = -25;
/*
*再这个数据之中,-25是一个常量,系统会为他分配4个字节的空间
*他是先在这4个字节的空间转换完补码,才传到ch里面的
*1000 0000 0000 0000 0000 0000 0001 1001     他在这4个字节大小的空间中是这样的,原码
*1111 1111 1111 1111 1111 1111 1110 0110     反码
*1111 1111 1111 1111 1111 1111 1110 0111	 补码
*存放进1个字节的空间必然会丢失数据
*只能保留对低位的字节 1110 0111
*取出来的时候是	先取在转
*取出来也要转换成原码
*/

其实在这些数据中,-128--127,这实际上是一个循环,如果溢出数据他会回到-128开始加。

浮点数
浮点数的指数形式 用
e/E
表示。

float f;
f = 2e2;   //就是2*10^2,2*10的2次方,e就表示以十为低的数
//要注意的是e的前面要有数字,e的后面必须为整数

浮点数在内存中存放的形式

字符串
字符串的表示方式是
""
双引号,然而单个字符的表示方式就是
''
单引号,如何判断字符串是否结束,
\0
这个空字符,系统遇到这个空字符会自动结束这个东西,在填写一段字符串,系统会在末尾自动加上
\0
不需要用户自己加上去。而且他也是看不见的。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号