进位计数制
r进制转10进制
设r进制数为,则该进制数转换为十进制是
当时,通常用大写字母来表示,等,例如,
10进制转r进制
使用除余方法来转换进制
不断地将10进制数除以r,每次得到的余数都写在上次的余数之前,最后得到的数字就是r进制数
例如将 19 转换为 2 进制,不断地除以 2,得到的余数分别是
1 | 19 ÷ 2 = 9 ...... 1 |
因此最后结果是 10011
小数转换
r进制转10进制时,小数部分继续按照上面的公式计算即可,如二进制下的 0.1 转换成10进制是
十进制转r进制时,不断地将小数部分乘上r,并取整数部分,例如将 0.123 转换为 8 进制
1 | 0.123 × 8 = 0.984 |
因此转换结果是
转换时出现无限小数是正常的,只需要保留有效位数即可
真值与机器数
真值是符合人类习惯的数字,是带有符号的
机器数是存粹的以数字形式保存的数字,它不带有任何符号,而是把符号也抽象为一个数字,例如用 1 表示正数,0 表示负数
考点总览
字符与字符串
ASCII码
英文字符在计算机中使用ASCII码表示
ASCII总共有128个字符,因此只需要7位,而在计算机中,使用一个字节表示一个ASCII字符,其中最高位置0
以下是ASCII码表
32~126为可印刷字符,其它字符为控制、通信字符
需要记忆的特殊位置有:
0: 48
A~Z: 65~90
a~z: 97~122
汉字编码
在1980年,中国推出了GB-2312标准,总共拥有7445个常用汉字
GB-2312标准采用区位码来表示汉字,共有94个区和94个位,区和位分别使用一个字节表示,一个汉字字符占两个字节
由于汉字编码也使用了ASCII中的控制字符,为了避免冲突,需要将区位码全部加上32,这样就避开了ASCII码中的控制字符区域,将区位码加上32就得到国标码(GB-2312)
为了避免国标码与ASCII码冲突,在存储时,需要将国标码全部加上128,这样所有的汉字都落到了128~255的范围,而ASCII码全部落到了0~127的范围,于是得到了汉字内码
在输入汉字时,采用输入码,例如拼音,五笔
在输出汉字时,采用字形码,字形码用来显示出汉字的图形
字符串
字符串就是一个字符类型的数组,在计算机中,根据字符位置,按顺序保存字符,通常用"\0"(00H)表示字符串结束
考点总览
定点数
定点数是指小数点位置固定不变的数,例如 12, 5.008
无符号数
无符号数是指整个字长的全部二进制位均为数值,而非符号.因此一个8位二进制数可以表示的范围是 0~255
在讨论无符号数时,如果没有特别说明,一律默认整数,而非小数
有符号数
有符号数的二进制位的最高位用于表示符号,称为符号位,通常用1表示正数,用0表示负数.后7位用于表示数值部分,称为尾数.
表示定点整数时,默认小数部分为0,此时小数点位于第8位后面,即末位的位权为2^0
表示定点小数时,默认整数部分为0.此时小数点位于第1位后面,即末位的位权位2^(-7)
原码
原码是指尾数用来表示真值的的绝对值,符号位 0/1 表示 正/负
已知27的二进制表示为 11011,如果用原码表示 +27,则应该是
0 0011011
已知0.875的二进制表示为 111,如果用原码表示 -0.875,则应该是
1 1110000
原码表示的范围为:整数-127~127,小数0~0.9921875
真值0具有两种原码表示形式,分别是 +0 和 -0
反码
反码的最高位也是符号位,当符号位为0时,反码与原码相同,当符号位为1时,反码的数值位与原码相反.无论是整数还是小数都一视同仁
1 | 原码:0 0011001 |
同样反码的真值0也有两种形式
补码
对于正数来说,补码就是原码;对于负数来说,补码是反码末位加一
1 | 原码: 0 0011001 |
在补码中表示 -0 时,其反码是
1 1111111
在最低位加一并不断进位,则变成
0 0000000
最高位前面的1被丢弃,恰好就是 +0 的补码
因此在补码中真值0只有一种形式,即 +0 的形式.多出来的 -0 形式被特殊定义
如果用补码表示定点整数,则"1 0000000"表示-128
如果用补码表示定点小数,则"1 0000000"表示-1
使用补码能够让减法运算变得简单,因为在加减运算时,只需要将整个补码看作一个二进制数,然后连同符号位一起相加(无论是加法还是减法都是相加),最终得到的就是计算结果的补码
移码
移码只能用来表示整数,只需要把补码的符号位取反就能得到移码
移码的好处在于能够使用硬件快速比较大小
如上图所示,当符号相同时,随着数字的增大,移码数值位也在不断变大.因此在比较整数大小时,只需要按顺序从最高位开始注意比较即可