搜索
热搜: NOIP OIer 神牛
查看: 389|回复: 2

计算机信息存储和处理

[复制链接]

主题

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-1-22 12:48:01 | 显示全部楼层 |阅读模式
计算机信息存储和处理
现代计算机是第四代计算机——超大规模集成电路计算机,不论电路规模有多大,其基本的构成单元也是门电路,门电路只有两种状态,开和关,因此,计算机存储和处理的信息都是以二进制信号表示。
计算机以二进制存储和处理数据也不是一蹴而就的,1674年:莱布尼茨改进了帕斯卡的计算机,使之成为一种能够进行连续运算的机器,并且提出了“二进制”数的概念,据说这个概念来源于我们的八卦。而后出现了用穿孔纸带作为输入设备的计算机,同样有孔和没孔对应了二进制的两个状态。
二进制简单,可靠,可以很自然容易的被表示、存储和传输,当代超大规模集成电路比较稳定可靠二进制功不可没,如果使用10进制,系统的纠错就会复杂很多,系统的体积和成本会大幅度增长。
1.
计算机中的数据是二进制数,二进制数只有01,一个0或者1,就叫做1位,英文是1bit,简写位1b
2. 字节
从理论上讲,计算机由五部分组成:
l 运算器
l 控制器
l 存储器
l 输入设备
l 输出设备
运算器和控制器又称为CPU
存储器指的是内存(我们所说的硬盘是输入或输出设备)计算机要处理数据先要将数据加载到内存中,数据在内存中的组织以字节为单位,
1字节
1字节
……
……
……
英文Byte,简写位B1B = 8b,例如:我们家里用到网络号称100M,这里的单位是bpsbit per second,换算后也就是12.5MBps


回复

使用道具 举报

主题

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2022-1-22 12:48:18 | 显示全部楼层
本帖最后由 oyangningtao 于 2022-1-22 12:49 编辑

3. 计算机常用进制和进制间的转换
一个字节由8bit组成,用二进制表示就是00000000——11111111,十进制就是0——256,二进制表示起来太麻烦,直接用十进制又不能直观的与位进行转换。所以,在程序和文献中经常用16进制来表示数据,为什么呢?我们先来看不同进制间数值的转换
一个n进制数到十进制数的转换有个概念叫基数和位权,以二进制数10100011为例:
7
6
5
4
3
2
1
0
1
0
1
0
0
0
1
1
它的基数是2,位权就是(2^位),也就是说当位=1时,在这位上如果是1,那就代表10进制数的2,所以m位二进制到十进制转换就是:
所以,10100011就等于163
同样,16进制数,基数是2,位权是(2^位),16进制包含0——F十六个数字,A相当于10B相当于11以此类推F相当于15,例如:
1
0
A
3
可以看到,二进制转换成十进制后,看不出十进制数与位模式的对应关系,但是可以看到:
0011 = 3
1010 = 10 = 0xA
实际上,一个16进制数就是与4bit对应,所以二进制与十六进制之间转换非常直接,因此用16进制来表示二进制数。二进制转换成10进制也可以通过转成16进制进行。
小数部分不同进制怎么转成十进制,也是一样的,由基数和位权确定以二进制为例:
小数点后
1
2
3
4
1
0
1
0
位权
2^-1
2^-2
2^-3
2^-4
所以1010b=1*2^-1 + 0* 2^-2+1*2^-3+0*2^-4=0.625
那么十进怎么转换成二进制呢,反过来计算:
0.625 * 2 = 1 + 0*2^-1+1*2^-2+0*2^-3=.......................................小数点后第一位:1
0*2^-1+1*2^-2+0*2^-3=0.125.....................................................0.625*2的小数部分
0.125*2=0+1*2^-1+0*2^-2............................................................小数点后第二位:0
1*2^-1+0*2^-2=0.5........................................................................0.125*2的小数部分
0.5*2 = 1 + 0 * 2^-1........................................................................小数点后第三位:10.5*2小数部分为0结束

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

主题

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2022-1-22 12:49:45 | 显示全部楼层
4. KMG为什么不是10的整数倍
知道了计算机用二进制表示就好理解了:
K=2^10=1024
M=2^20=2^10K=1024K1048576
G=2^30=1024M=1,073,741,824
5. 编码
一般,单独的bit不是非常有用,把bit组合在一起构成一个系统就可以表示任何数,这就叫数的编码,计算机中数的编码又原码,反码和补码,例如一个数10
原码:1010
反码:0101
补码:0110
反码是源码按位取反
补码时原发取反加1
原码可以用来表示所有无符号数。
对于有符号数,使最高位为符号位,负数用补码表示:例如
50101
-51011
如果最高位的位权是-2^n,其他位的位权不变的话那么整数n的补码就是-n
0*-2^3+1*2^2+0*2^1+1*2^0 = 5
1*-2^3+0*2^2+1*2^1+1*2^0 = -5
6. 计算机信息存储和处理在C++程序开发中的作用
了解了上面的知识就可以更好的理解变量类型转换,例如:如果一个unsigned short的数赋值给要给short的数可能得到的不是你想要的结果:
unsigned short a= 0x8000;
short b=a;
那么b的值使多少呢?大家可以试一下使-32768,过程如下所示:
a是无符号数,在内存中如此存储:
a
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
b是有符号数,赋值为1后,在内存中也是如a一样的存储:
b
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
但是b的最高位为符号位,所以b的值
-1*2^15=-32768
所以,建议大家不要把不同类型的变量赋值给其他变量。
可见,计算机原理性的知识可以帮助我们更好的理解学习程序,真正知其然也知其所以然。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

津ICP备19006949号-1 | 津公网安备12010102000465号

快速回复 返回顶部 返回列表