· 进制转换
1.数制
1.1、数制定义
数制,也称为进位计数制,是按进位的方法进行计数,用一组固定的符号和统一的规则来表示数值的方法。一种进位计数值由数码、基数和位权三部分组成。
数码:
数码是组成该数的所有数字和字母
基数:
进位计数制中所使用的不同基码的个数称为该进位计数制的基数
位权:
计算每个数码在其所在位上代表的数值时所乘的常数称为位权。位权是一个指数,以基数为底,其幂次是该数码的数位
在计算机中由于二进制电路具有设计简单、运算简单、工作可靠、逻辑性强等优点,因此使用的是二进制计数制。但人们日常使用的是十进制,所以计算机的输入和输出也要使用十进制数据。此外,歪了编制程序的方便,还常常使用八进制和十六进制。
1.2、数制的规律
数制虽然有许多类型,但其技术运算规律都有共同的规律和特点。
(1)逢N进一,借一当N。N是指基数。即,每位计满N时向高位进一,向高位借一位,相当于借N。
(2)位权表示法。处在不同位置上的数码所表示的值各不相同,每个数码位置决定了它的值。任何一种数制表示的数都可以写成按位权展开的多项式之和。
1.3、常用的数值
1.3.1、十进制(Decimal)
十进制是使用0、1、2、3、4、5、6、7、8、9十个符号作为数码,基数为10,相邻两位之间逢十进一。
第i位 | 权10^i | 对应的十进制数 | 第i位 | 权10^i | 对应的十进制数 |
---|---|---|---|---|---|
0 | 100=1 | 1 | |||
1 | 101=10 | 10 | -1 | 10-1=0.1 | 0.1 |
2 | 102=100 | 100 | -2 | 10-2=0.01 | 0.01 |
3 | 103=1000 | 1000 | -3 | 10-3=0.001 | 0.001 |
··· | ··· | ··· | ··· | ··· | ··· |
n-1 | 10^(n-1) | 100···0(n-1个0) | -m | 10-m | 0.00···01(小数点后m-1个数) |
例:十进制数1234.5可表示为:
1234.5=1×103+2×102+3×101+4×100+5×10-1
式中,103、102、101、100、10-1分别是千位、百位、十位、个位和十分位的位权
1.3.2、二进制(Binary)
0 = 0 二进制特点:2种符号(0-1)
1 = 1 逢二进一
10 = 2
11 = 3
100 = 4
101 = 5
110 = 6
111 = 7
1000 = 8
例:二进制数1011.1可表示为:
1011.1=1×23+0×22+1×21+1×20+1×2-1
二进制数满足加减乘除四则运算:
加法:0+0=0、0+1=1、1+0=1、1+1=0(向高位进一):1111+1011=11000
减法:0-0=0、1-0=1、1-1=0、0-1=1(向高位借一当二):1001-0111=0010
乘法:0×0=0、0×1=0、1×0=0、1×1=1 :1101×1000=1101000
除法:0÷0=0、0÷1=0、1÷0(无意义)、1÷1=1 :1101÷1000=1.101
二进制的逻辑运算:
二进制的逻辑运算主要有4种运算符:“与”、“或”、“非”、“异或”
(1)“与"运算(AND)。“与"运算又称逻辑乘,可以用符号”·”、“×”、"∧"来表示。如有AB两个逻辑变量,每个逻辑变量只能有0和1两种取值,可能的取值情况有4种,在各种取值条件下“与运算规则如下表所示。当且仅当A、B两个变量同是取1时,它们的”与“运算结果才是1,其余情况结果均为0。
A | B | A∧B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
例:11010111 AND 00001111=00000111
“与”运算的作用主要有以下两个:
①取某数中指定位(mask中特定位置1,其他位为0,s=s∧mask)。例如,mask=1,一个数AND mask就是取这个二进制数的最末位,可以用来判断这个数的奇偶:如果结果为0,表示这个数的末位是0,是偶数;反之,结果为1,表示这个数的末位是1,为奇数。
②清零特定位(mask中特定位置0,其他位为1,s=s∧mask)。
(2)”或“运算(OR)。”或“运算又称逻辑加,可以用符号”+“或”∨“表示,或运算的云撒UN规则如下所示,当且仅当A、B两个变量取值同时为0时,它们的”或“运算的结果才是0。
A | B | A∨B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
例:11110010 OR 00000001=11110011
“或”运算通常用于二进制特定位上的无条件赋值,它的作用主要就是将源操作数某些位置1,其他位不变。例如,一个数OR 1的结果就是把二进制最末位强行变成1。如果需要把二进制最末位变成0,对这个数OR 1之后再减1就可以了,其实际意义就是把这个数强行变成最接近的偶数。
(3)“非”运算(NOT)。“非”运算又称为逻辑否,用符号“一”来表示。“非”运算仅需要一个参与运算的逻辑变量,其运算规则如下表所示,运算结果的各位取与逻辑变量相反的值。
A | ¬A |
---|---|
0 | 1 |
1 | 0 |
例:¬(11110010)=00001101
(4)“异或”运算(ExclusiveOR,XOR)。“异或”运算可以用符号“⊕“来表示。“异或”运算的运算规则如下表所示,当且仅当A、B两个变量取值相异时,它们的“异或”运算的结果才是1;否则A、B两个变量取值相同时,它们的“异或”运算的结果就为0。
A | B | A⊕B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
例:11110010 XOR 00000001=11110011
“异或”运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变,即(A XOR B)XOR B=A。“异或”运算的作用主要有以下两个。
①使特定位的值取反(mask中特定位置1,其他位为0 s=s⊕mask)。
②把一个数自清零,如A=A XOR A不管A是多少,最后A都等于零。
1.3.3、八进制(Octal)
使用0、1、2、3、4、5、6、7八个符号作为数码,基数为8,相邻两位间逢八进一,位权为8^i,8为其基数,i为其数位序号
例:八进制数7654.3可表示为:
7654.3=7×83+6×82+5×81+4×80+3×8-1
1.3.4、十六进制(Hexadecimal)
使用0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F十六个符号作为数码,其中A、B、C、D、E、F分别对应10、11、12、13、14、15,基数为16,相邻两位间逢十六进一,位权为16^i,16为其基数,i为其数位序号
例:十六进制数B0F1.9可表示为:
B0F1.9=11×163+0×162+15×161+1×160+9×16-1
2.数制转换
2.1二进制数、八进制数、十六进制数转化为十进制数
转换的方法就是按照位权展开表达式
例:
(1001.11)2=1×23+0×22+0×21+1×20+1×2-1+1×2-2
=8+0+0+1+0.5+0.25=(9.75)10
式子中的角码表示不同进制
(136)8=1×82+3×81+6×80=(94)10
(10F.8C)16=1×162+0×161+15×161+8×16-1+12×16-2
=256+0+15+0.5+0.046875=(271.546875)10
特殊情况:
全为1:11111转化为十进制:31 = 2^5-1
111111转化为十进制:63 = 2^6-1
2.2十进制数转换成二进制数
将十进制数转换成等值的二进制数,需要对整数和小数部分分别进行转换。整数部分转换法是连续除2,直到商数为零,然后逆向取各个余数得到一串数位即为转换结果。(即用短初的方法)
例:
(56)10=(111000)2,计算过程略
小数部分转换法是连续乘2,直到小数部分为零或已得到足够多个整数位(进入循环),正向取积的整数(后得的整数位为结果的低位)位组成一串数位即为转换结果。
例:
(0.6)10=(0.1001)2(因进入循环,保留四位小数)
*补:
十进制转二进制还可以用凑数法
例:
(20)10=(16)10+(4)10=(10000)2+(100)2=(10100)2
将十进制数190转换为二进制数:
128 64 32 16 8 4 2 1 八位位权
1 0 1 1 1 1 1 0
用190从最高位开始依次与位权相减,若差大于等于零,则为1,差为负数则为0
190-128=62>0··········1
62-64=-2····················0
62-32=30>0···············0
········
2-2=0··························1
0-1=-1·························0
将十进制数250转化为二进制数:
128 64 32 16 8 4 2 1
1 1 1 1 1 0 1 0
2.3十进制数转换为八进制数和十六进制数
对整数部分“连除基数取余”,对小数部分“连乘基数取整”的转换方法可以推广到十进制数到任意进制数的转换,这时的基数要用十进制数表示。例如,用“除8逆向取余”和“乘8正向取整”的方法可以实现由十进制向八进制的转换;用“除16逆向取余”和“乘16正向取整”可实现由十进制向十六进制的转换。
2.4八进制数和十六进制数与二进制数制间的转换
由于3位二进制数所能表示的也是8个状态,因此1位八进制数与3位二进制数之间有着一一对应的关系,转换就十分简单。即将八进制数转换成二进制数时,只需将每一位八进制数码用3位二进制数码代替即可。
例:
(363.06)8=(011 110 011.000 110)2
为了便于阅读,这里在数字之间特意添加了空格与下画线。若要将二进制数转换成八进制数,只需从小数点开始,分别向左和向右每3位分成一组,用一位八进制数码代替即可。
例:
(11110010.00100101)2=(011 110 010 .001 001 010)2=(362.112)8
注意:整数部分的最后一组如果不足3位,应该在前边用0补足3位再进行转换;小数部分最后一组如果不足3位,应在尾部用零补足3位再进行转换。
与八进制数类似,一位十六进制数与4位二进制数之间也有着一一对应的关系。将十六进制数转换成二进制数时,只需将每一位十六进制数码用4位二进制数码代替即可。
例:
(6F.0C)16=(0110 1111.0000 1100)2=(110 1111.0000 11)2
将二进制数转换成十六进制数时,只需从小数点开始,分别向左和向右每4位一组用一位十六进制数码代替即可。整数部分的最后一组如果不足4位,应该在前边用0补足4位再进行转换;小数部分的最后一组不足4位时要在尾部用0补足4位再进行转换。
例:
(10010110.101011)2=(1001 0110.1010 1100)2=(96.AC)16
2.5常用数制的对应关系
通常,十进制数转换成八进制数、十六进制数时,可以先将其转换为二进制数,然后再根据进制数转换成需要的进制数,反之亦然。
常用数制的数码和基数如下表。
十进制 | 二进制 | 八进制 | 十六进制 | |
---|---|---|---|---|
基数 | 10 | 2 | 8 | 16 |
数码 | 0~9 | 0、1 | 0~7 | 0~9、A、B、C、D、E、F |
四中常用数制之间的转换如下表所示.
十进制数 | 二进制数 | 八进制数 | 十六进制数 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 10 | 2 | 2 |
3 | 11 | 3 | 3 |
4 | 100 | 4 | 4 |
5 | 101 | 5 | 5 |
6 | 110 | 6 | 6 |
7 | 111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | A |
11 | 1011 | 13 | B |
12 | 1100 | 14 | C |
13 | 1101 | 15 | D |
14 | 1110 | 16 | E |
15 | 1111 | 17 | F |
5.二进制与IP地址
IP地址由32位二进制数组成,可分成四组
6.存储单位
1)位(bit)
位是计算机存储设备的最小存储单位,简写为’b’,音译为’比特’,表示为二进制中的一位。
2)字节(Byte)
字节是计算机中用于描述存储容量和传输容量的一种计量单位,即以字节为单位解释信息,简写为“B”,音译为“拜特”。8个二进制位编为一组称为一个字节,即1B=8b。通常人们所说的计算机内存大小2GB,即表示该计算机主存容量为230个字节,简写为2GB。也就是说,内存由230个存储单元构成,每个存储单元包含8位二进制信息。计算机内部,数据传递也是按照字节的倍数进行的。
3)字长
一般而言,计算机在同一时间内处理的一组二进制数称为一个计算机的“字”,而这组二进制数的位数就是“字长”。字长是计算机的一个重要技术指标,直接反映了一台计算机的计算精度。字长总是8的整数倍,通常PC的字长为16位(早期)、32位、64位,也就是常说的16位机、32位机、64位机。字长是CPU的主要技术指标之一。指的是CPU一次能并行处理的二进制位数,在其他指标相同时,字长越大计算机的处理数据的速度就越快。
们所说的计算机内存大小2GB,即表示该计算机主存容量为230个字节,简写为2GB。也就是说,内存由230个存储单元构成,每个存储单元包含8位二进制信息。计算机内部,数据传递也是按照字节的倍数进行的。
3)字长
一般而言,计算机在同一时间内处理的一组二进制数称为一个计算机的“字”,而这组二进制数的位数就是“字长”。字长是计算机的一个重要技术指标,直接反映了一台计算机的计算精度。字长总是8的整数倍,通常PC的字长为16位(早期)、32位、64位,也就是常说的16位机、32位机、64位机。字长是CPU的主要技术指标之一。指的是CPU一次能并行处理的二进制位数,在其他指标相同时,字长越大计算机的处理数据的速度就越快。
通常,一个字节的每一位自右向左依次编号