1.1. 进制的简介
进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常
用的“正”字计数法,以及类似的tally mark计数)。对于任何一种进制---X进制,就表示每一位置上的数运算时都是逢X
进一位。十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。
1.2. 进制的分类
在程序中,常用的进制可以分为以下几种:
二进制:以数字0-1来表示每一个自然数,逢2进1。
八进制:以数字0-7来表示每一个自然数,逢8进1。
十进制:以数字0-9来表示每一个自然数,逢10进1。
十六进制:以数字0-9,a-f来表示每一个自然数,逢16进1。
1.3. 进制的表示
同一个自然数,用不同的进制表示的话,结果可能是不一样的。例如,数字10,如果是二进制,表示数字2;如果是八进
制,表示数字8;如果是十进制,表示数字10;如果是十六进制,表示数字16。因此,不同的进制,需要有不同的标识,来
区分不同的进制。
二进制:以0b作为开头,表示一个二进制的数字,例如:0b10、0b1001...
八进制:以 0 作为开头,表示一个八进制的数字,例如:010、027...
十进制:没有以任何其他的内容作为开头,表示一个十进制的数字,例如:123、29...
十六进制:以0x作为开头,表示一个十六进制的数字,例如:0x1001、0x8F3C..
1.4. 进制的转换
1.4.1. 十进制转其他进制
辗转相除法:用数字除进制,再用商除进制,一直到商为零结束,最后将每一步得到的余数倒着连接以来,就是这个数
字的指定的进制表示形式。
18 = 0b10010 = 022 = 0x12
1.4.2. 其他进制转十进制
每一位的数字乘进制的位数-1次方,再将所有的结果累加到一起。
0b 10010 =1x2^4 +1x2^1 =16+2= 18
022 =2x8^1 +2x8^0 =16+2= 18
0x12 =1x16^1 +2x16^0 =16+2= 18
1.4.3. 二进制与八进制, 十六进制的相互转换
-
每一个八进制位可以等价替换成三个二进制位。
-
每一个十六进制位可以等价替换成四个二进制位。
二进制 | 八进制 | 十进制 | 十六进制 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
10 | 2 | 2 | 2 |
11 | 3 | 3 | 3 |
100 | 4 | 4 | 4 |
101 | 5 | 5 | 5 |
110 | 6 | 6 | 6 |
111 | 7 | 7 | 7 |
1000 | 10 | 8 | 8 |
1001 | 11 | 9 | 9 |
1010 | 12 | 10 | A |
1011 | 13 | 11 | B |
1100 | 14 | 12 | C |
1101 | 15 | 13 | D |
1110 | 16 | 14 | E |
1111 | 17 | 15 | F |
10000 | 20 | 16 | 10 |
1.5. 原反补
1.5.1. 数据的转换
在计算机中,所有的数据存储都是以二进制的形式存储的。文字、图片、视频...,在计算机中都是二进制。那么,在计算机的存储系统中,每一个文件都有大小。那么文件的大小是如何计算的?
每一个二进制位称为一个比特位(bit)
8个比特位称为一个字节(byte)
从字节开始,每1024个单位向上增1。
1024进制:
Byte -> KB -> MB -> GB -> TB -> PB -> EB -> ZB -> YB -> BB -> NB -> DB -> CB -> XB
8进制(8位1字节):
8 Bit(位) -> 1 Byte(字节)
什么是内存?
a)内存是计算机中重要的部件之一,它是外存与CPU进行沟通的桥梁。
b)计算机中所有程序的运行都是在内存中进行的.
c)内存是瞬时状态下的存储空间,造价高、工业上的设计具有瓶颈,不具有普及性。
什么是内存条?
a)内存条一般指随机存取存储器。
b)随机存取存储器(英语:Random Access Memory,缩写:RAM),也叫主存,是与CPU直接交换数据的内部存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。RAM工作时可以随时从任何一个指定的地址写入(存入)或读出(取出)信息。它与ROM的最大区别是数据的易失性,即一旦断电所存储的数据将随之丢失。RAM在计算机和数字系统中用来暂时存储程序、数据和中间结果。
什么是硬盘?
硬盘(港台称之为硬碟,英文名:Hard Disk Drive, 简称HDD 全名温彻斯特式硬盘)由一个或者多个铝制或者玻璃制的碟片组成。绝大多数硬盘都是固定硬盘,被永久性地密封固定在硬盘驱动器中。
硬盘和内存的区别是什么?
a)定义用途不同:
固态硬盘是存储设备,而内存条是中转设备。
b)东西存储方面:
固态硬盘在断电后存储在其内部的东西不会丢失,而内存断电后再开机信息就没有了。
c)外观方面:
固态硬盘是一块长方体状的设备,而内存条是一个长条形的设备。
d)接口方面:
固态硬盘的接口分为电源接口和信号接口。而内存条是金手指类接口。
e)操作方面:
不是所有的操作都要经过硬盘,但是所有的操作都要经过内存
为什么我们买的硬盘的实际的空间要比报出的空间要小?
计算机的硬盘的换算机制往往是1024进制的,而有一些厂商在制作硬盘时往往为了计算方便以1000进制来进行制作,所以得到的硬盘空间往往要小于给出的空间.
Java虚拟机(Java程序)默认分配到的物理内存是1/8(在不进行人为操作配置的情况下)
1.5.2. 负数的表示
在使用二进制表示数字的时候,通常会写满1个字节,如果1个字节表示不了,使用2个字节。如果2个字节表示不了,使用4个字节。以此类推,8个字节、16个字节、32个字节...
在使用二进制表示数字的时候,最高位(最左侧的位)不是用来表示数字的大小的,而是用来表示数字的正负的。0代表整数,1代表负数。因此,最高位又被称为符号位。
0b00001000所表示的数字是8 0b10001000所表示的数字是-8
1.5.3. 补码的引入
计算机理论基础
编程:编写程序。
其实就是操作计算机,让计算机帮我们实现我们想要的需求。
计算机其实是一个非常单一的机器,计算机只认识两个数字: 0 和 1,并且只会做加法。
1.5.3.1. 符号位参与运算的问题
在数据的运算中,由于有符号位的存在。符号位直接参与运算,会导致计算的结果出问题。
例如,在计算8+(-8)的时候,如果直接使用二进制表示形式进行运算的时候:
00001000+10001000=1001
得到结果 : -16
原因就是因为符号位参与了运算,导致计算的结果出了问题。
1.5.3.2. 原反补
为了规避在计算过程中,符号位的参与运算,导致计算结果出错。人们引入了补码,规避了这个问题。在计算机中,所有的数据存储和运算,都是以补码的形式进行的。
-
原码:一个数字的二进制表示形式,前面的计算二进制表示形式,得到的就是原码。
-
反码:正数的反码与原码相同;负数的反码是原码符号位不变,其他位按位取反。
-
补码:正数的补码与原码相同;负数的补码是反码+1。
例: 8,因为是正数,原反补都是0000 1000
-8[原] = 1000 1000
-8[反] = 1111 0111
-8[补] = 1111 1000
1.5.3.3. 补码运算
在计算机中,所有的数据存储和运算,都是以补码的形式进行的。因此,在进行数据运算的时候,将数据计算出补码,再进行运算。
8 + (-8) = 0
0000 1000 + 1111 1000 = 1 0000 0000 ----> 0000 0000
在上述的计算结果中,出现了多出一位的情况,这种情况,称为溢出。
如果出现了溢出的情况,溢出位直接舍去不要,即最后的计算结果是00000000,结果是0.
8 + (-16) = -8
0000 1000 + 1111 0000= 1111 1000 ----> 1000 1000
注意:补码与补码的计算结果,还是补码。所以,我们需要将这个结果再转成原码。
补码求原码的过程:再对这个补码求补即可。得出结果:10001000,结果是-8