非数值符号编码
计算机对非数值符号的处理大致分三个过程:字符输入,机内处理,字符输出;这就对应这三种阶段的编码,这里叫做输入码,机内码,字形码,不同阶段可以用 相同的编码技术。这只是我对中文编码的扩展,因为都是非数值符号,所以中文和西文没有什么太大区别。
这里主要以汉字的处理为主,西文的处理类似。汉字输入码的编码方式大致分四种:流水码(国标码,区位码),音码(全拼,智能ABC),形码(五笔),音形码。汉字机内码是计算机内存储和处理汉字时候用到的编码(GB2312,ascii,utf-8),这种对应关系是在硬盘中或者内存中存储着ascii或者GB2312的码表。汉字的区位码和机内码的对应关系:区位码+A0A0H;这样保证两个字节的中文表示中单字节最高位为1,可以表示出当两个字节时候是表示一个中文还是两个西文字符。汉字字形码,就是输出文字时候的点位,通过01画出字符。
之前一直在努力弄明白8421BCD码和ascii的关系,今天终于搞明白了。十进制的8421BCD码表示和十进制的二进制数字表示并不一样,例如:0001 1000,当把它视为二进制数时,其值为24;但作为2位BCD码时, 其值为18。又例如0001 1100,如将其视为二进制数,其值为28,但不能当成BCD码,因为在8421BCD码中,它是个非法编码 。当用户输入55的时候计算机用0110101 0110101两个ascii编码来表示55,但是这不是十进制中的55的二进制表示(明显不是),所以计算机会把这两个ascii字符编码的二进制表示转换成十进制的二进制编码表示,也就是8421BCD编码(ascii数字编码的二进制表示去掉高三位便是十进制的二进制编码表示),这时计算机会把十位的5(101)乘与10(1010)得到50(110010),个位的5(101)乘与1(1)得到5(101),然后相加便是十进制55的二进制表示(110111),他的逆过程便是计算机想把110111(55),在控制台显示“55”,计算机在把二进制表示成十进制字符串表示时候先判断这个二进制表示的十进制的最高位是多少,通过连续除于1010直到余数小于1010(10),本例中110111经过这种方式判断为两位,所以:它首先会用110111(55)除于1010(10)等于101(5),然后发现对应于8421BCD中的“5”,然后输出,用110111-101*1010便是101,发现对应于计算机的8421BCD中的“5”,然后输出,这时候便是“55”的表示。
非数值数据的表示以及十进制数的二进制编码(BCD)表示,布布扣,bubuko.com