目录
1.数制及其转换
1.1常用数制
(1)十进制数(Decimal):人类习惯的数字,数码为0~9;
(2)二进制数(Binary):由于计算机只能识别0和1,故计算机中的数据采用二进制表示;
(3)十六进制数(Hexadecimal):由于二进制数较长,难以辨别,故采用四位二进制数表示一位十六进制数,数码为0~9和A ~F(数据的地址通常显示为16进制)。
1.2数制之间的转换
(1)十进制转其他进制
[1] 整数部分: 除基取余(辗转相除),用当前十进制数值一直除以目标进制的基数,直到结果为0,再将余数路径上最后一个作为最低位开始向左(高位)扩展。
[2] 小数部分: 乘基取整,与整数部分操作相反,用当前十进制小数乘以基数,每次取出整数部分,剩余部分继续乘,直到小数部分为0(有时永远取不到就保留几位小数,损失精度),然后将整数路径上第一个作为最高位开始向右(低位)扩展。
(2)其他进制转十进制
较简单的通用方法:位权法:即各位位权乘以该位数值后累加。
(3)2,8,16进制的转换
由于3位2进制数表示一个8进制数,4位二进制数表示一位16进制数,故三者存在一种天然的转化关系。
整数部分从右往左,每3位2进制数组成1位8进制数,每4位2进制数组成一位16进制数,不足补0;
小数部分从左往右,不足补0。
2.计算机中的数值编码
2.1原码,反码,补码
由于计算机以字节为一个基本存储单位,故常以8个二进制位为单位。
(1)原码:最高位为符号位(0正1负),余下7位为正常二进制数值表示。(故范围为-127 [11111111] ~ +127 [01111111])
(2)反码:原码各位取反(0变1,1变0)。
(范围:-127~127)
(3)补码: 在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。(-128~127)
(PS:最小为什么是-128?)
看到一种比较好的解释:在补码时:由于+0和-0都表示0,故规定0由+0表示,-0则用来表示-128(10000000),故-128是一个规定值。
2.2原码与补码的关系:
对于正数:原码反码补码都相同。
对于负数:则遵循除符号位按位取反再加1的原则。
PS:负数补码的补码即为原码(即为补码按原转换规则再操作一次)
2.3补码加减法
[X+Y]补=[X]补+[Y]补
[X-Y]补=[X]补-[Y]补=[X]补+[-Y]补
3.计算机中的字符编码
计算机中各种字符需要用若干二进制码的组合表示,故有字符的二进制编码。
3.1BCD码
BCD(Binary Coded Decimal)二进制编码的十进制数,最常用的是8421BCD码(操作简单,跟10进制数的二进制表示一一对应)。
(1)压缩BCD码
一个字节表达两位BCD码(一个字节为8位,即用4位表达一个BCD码,这其实就够了)
(2)非压缩BCD码
将二进制数的一个字节(8位)的高四位设置为0,仅用到第四位表示一个BCD码(会浪费一半的空间)。
举例:
十进制真值87用压缩BCD码和非压缩BCD码表示分别为:
压缩BCD码:1000 0111
非压缩BCD码:00001000 00000111
3.2ASCII码
ASCII(American Standard Code for Information Interchange),标准的ASCII用7位二进制编码,故有2^7=128个;而计算机的一个存储单位为8位,故其最高位通常作为0(通信时,其作为奇偶校验码),为适应更多字符需求还有扩展ASCII。
3.3Unicode
Unicode使用16位编码,使得能对世界上大多数字符编码,同时兼容了ASCII,并提供了扩展能力(ASCII的升级版)。