前面简单介绍过二进制数制系统,这里不做多的赘述。话说计算机只能识别二进制数制系统,这句话其实并不怎么确切。咱们知道计算机是有多个电子元件组成的,而电子元件通常都存在两个状态(例如:通电或断点两个状态),与二进制数制系统只有两个数码(0或1)比较相似,因此计算机的CPU内部程序集(指令集)就使用0或1来表示其不一样组件的电子元件的状态,所以也就出现了计算机只能识别二进制数制系统这句话。算法
程序是由指令序列(一串二进制数码)组成的,其序列的排列和组合方式与具体的CPU机器有关,这个程序指令序列能够与CPU中的指令集相映射,可以解析为具体的指令从而来支配计算机完成工做。这也就是程序的执行原理。编程
废话说了这么多,无非是想说一个问题,计算机只能识别0和1组成的二进制数值,那么为何计算机又能呈现给咱们形形×××的信息呢?答案就是——编码,某些时候也成为编译。计算机中的任何程序、文件以及符号、数值等都是按规则编码为0和1的二进制数码序列后的信息,而后由CPU支配电子元件的不一样动做而呈现不一样的效果的。编程语言
这里所说的数值主要指某个数制系统下的全部数码以及正负号(±)和小数点(.)组成的数值,是相对其它非数值符号而言的,主要用于表示量的单位。ide
某个数据的真实大小(即数学范围中的大小)称为真实值,一般真实值可分为整数、0和负数,也可分为小数和整数。而在计算机中某个数据只能经过电子信号模拟表示或经过电子元件组合模拟存储,在计算机中的数值表示称为机器数或机器码。机器数就是将现实中的数据使用二进制数码来模拟机器元件,将其信号化,一般可分为无符号数和有符号数,有符号数又可分为正数、负数、小数等;又可分为定点数和浮点数等等,各类划分方式都有必定的衡量标准。下面主要介绍机器数的表示方式,也就是计算机中数值数据的编码方式。(如下均以十进制计算机中的表示方式进行介绍)编码
这里所说的无符号数主要指无符号的整数(这里笔者把小数点和正负号做为符号进行划分,因此无符号的就只有整数了,并且仍是数学中的正整数,有些理解不一样,请勿误解)。spa
在计算机中1个字节等于8位,也就是说一个字节能够表示256种不一样的信息(每一位都有0和1数码随机排列组合,即得出28=256种不一样的组合方式,因此说一个字节能够表示256种不一样的信息)。先假设0用00000000来表示,1用00000001来表示,2用00000010来表示,依次类推,能够得出其最大的数码为11111111,咱们将其转换为十进制数值则分别为0、一、2……255,这就是计算机表示和存储无符号整数的原理,不难看出计算机中一个字节最大可以表示的无符号的整数为范围为0~255(0~28-1)。在编程的过程当中你确定会发现任何一种数值类型都是有其数值表示范围的,也就是这个意思。设计
事实上,机器数的表示范围受机器自己处理能力(主要指CPU字长)限制,好比8位的CPU中,能够表示的无符号机器数范围为0~28-1,其使用一个字节表示一个数值,例如00000000表示0,00000001表示1,00000010表示2,依次类推;16位的CPU中,能够表示的无符号机器数范围为0~216-1,其使用两个字节表示一个数值,例如00000000 00000000表示0,00000000 00000001表示1,00000000 00000010表示2,依次类推;32位CPU中,能够表示的无符号机器数范围为0~232-1,其使用四个字节表示一个数值;64位CPU中,能够表示的无符号机器数范围为0~264-1,其使用八个字节表示一个数值。能够看出CPU字长越长,其表示的数据范围越大,固然计算就越精确,可是其计算速度会相应降低。3d
无符号数据使用与机器相关的位数来表示,范围为0~2n-1(n表示机器位数)。无符号数据在计算机中表示相对比较简单,给定一个无符号的二进制数码则能够轻松的转换为其对应的十进制数值。blog
这里所说的有符号的数主要指正负数和小数(这里笔者把小数点和正负号做为符号进行划分,因此有符号的就就是正负数和小数,有些理解不一样,请勿误解)。内存
因为计算机只能识别0和1两种符号,因此像数学中的正负号(“+”、“-”)和小数点(“.”)这些符号其都没法识别,只能使用0或1来代替,因为0和1默认都表示数值,因此只能经过数位(数码的位置)来描述正负号或小数点,这个过程称为“符号的数字化”过程。
根据小数点位置的固定与否能够将数值分为定点数和浮点数两大类。定点数就是小数点的位置固定不变的数值;浮点数就是小数点的位置不能固定的数值。
定点数就是小数点位置固定不变的数据,能够表示全部的整数和小于1且大于0或大于-1且小于0的全部小数。由于整数的小数点固定在其数值的最右边,而大于-1小于0或小于1或大于0的小数的小数点固定在其数值的最左边。
数有正负之分,计算机中对正负号的数字化过程规定,二进制数码序列的最高位表示符号位,用来决定数值的正负形式;符号位上使用“0”表示正号(“+”),使用“1”表示负号“-”。因为二进制数码序列的最高位称为符号位,不具备实际数值意义,因此二进制数的形式值与其真值存在差别。好比在8位的机器中,二进制数值00000001表示十进制的+1,而10000001则表示十进制的-1。有符号的整数可使用如下通用方式进行描述:
其中“S”表示符号位(0表示“+”、1表示“-”),占一位;“M”表示数值位,占多位。总体表示一个二进制的正负数值。
对于定点小数同样,其也存储正负之分,其最高位表示符号位,其余位表示数值位,而其小数点则是固定在其符号位和数值位之间。这里不作多的介绍,其表示方式与整数很是相似,例如00000001能够表示0.1,而10000001则能够表示-0.1。
从对无符号整数的介绍中能够知道,计算机中一个字节能够表示256种不一样的数值,对于无符号的数值的范围能够看做0~28-1(即0~255),而对于有符号的数值,其每一种表示法的最高位做为符号位进行处理,没有实际数值意义,则最小为11111111(-127),最大为01111111(+127),因此其可以表示的有符号的整数数值范围为-127~+127(-27+1~+27-1);从另外一个角度分析,其一个字节能够表示的有符号的小数范围则为-0.127~+0.127。事实上,不一样的CPU字长所表示的有符号数值范围有所不一样,具体与机器自己有关。
上面主要介绍的是整数的表示方式,而关于小数的表示不只须要考虑其正负符号,还须要考虑其小数点的位置。因为过于复杂,因此大多数的资料文献都是一笔带过。这里也简单的介绍一下。
小数根据小数点的位置固定与否可分为定点小数或浮点小数两大类。定点小数上面也提到过,因为其小数点的位置固定不变,因此其表示方式与整数表示方式很是类似。这里主要介绍一下浮点小数的表示方式。
浮点小数是小数点位置不固定的小数形式,因为其小数点位置不固定,因此并不能像定点小数那样表示,首先其也有正负之分,因此必须使用一位来做为符号位表示其数值的正负,其次为了临时表示其小数点的位置必须使用几个数位来描述小数点的位置,再次就是要表示数值的大小,其通用格式以下图:
其中“S”表示符号位(0表示“+”、1表示“-”),占一位;“P”表示阶码,即用来描述小数点的位置;“M”表示数值位,占多位。总体表示一个二进制的正负浮点数值。
浮点数的阶码一般使用移码的方式来表示,在计算机中的浮点数阶码是一个n位的整数,表示2的指数,能够有符号。移码固定对于一个n为的阶码N,其移码公式为:
N移=2n-1+N (-2n-1≤N<2n-1)
N移=1+N (-1≤N<1)
其中N表示阶码数值,n表示阶码位数。具体的内容可自行深究。
在计算机中以近似值表示全部的实数,相似于十进制中的科学计数法,计算机中的浮点数能够表示为N=2n×S,其中2n称为数N的指数(也成为阶码),用于表示小数点的具体位置;S为数N的尾数部分,用于表示数的符号和有效数值。为了更精确的表示浮点数,如今的一样浮点数表示规范以下图:
其中阶符和阶码合在一块儿用来表示小数点的位置,而且规定阶码必须为整数;尾符和尾码用来表示小数的精度,而且固定尾码必须是定点小数,尾码的数值绝对值必须大于0.1而且小于1;阶符和尾符分别占一位,0表示正,1表示负,阶码和尾码根据机器不一样和浮点数精度不一样所占位数要求不一样。例如0.1011×2100与0.01011×2101两种表示方式,在咱们看来都是同样的,可是机器是有必定位数限制的,若是尾数部分只存在4位,则第二种表示方式将存在偏差,因此为了减少偏差,规定尾码的绝对值必须大于0.1而且小于1。好比在8位的机器中,二进制浮点数N=210×0.1010其对应的机器数为01001010,各位表示含义以下图:
若是是二进制浮点数N=210×-0.1010其对应的机器数为01011010,若是是二进制浮点数N=2-10×-0.1010其对应的机器数为11011010。
二进制浮点数中的阶码用于决定数的范围,若是不给定其占用位数,则很难决定其所能表示的小数数值范围。当二进制浮点数的尾数为0其表示机器数零,当其阶码为最小时该浮点数最接近于零,可在所能表示的范围内近视为零。浮点数的尾数是决定了该浮点数的基带大小,都是以定点小数来表示的,相似整数的表示方式,浮点数的运算级别都是将位数进行运算。
计算机数值可划分为有符号和无符号两大类,无符号主要是指0和正整数;有符号的数值主要指正负数和0。无符号的数值编码相对比较简单,使用指定位数(与机器有关)的二进制数码序列直接表示便可,其运算也相对简单,每一位均参与运算;而有符号的整数和定点小数在编码过程当中均须要提供一个数位做为符号位用来表示其数值的正负号,由于其减小了一位有效数值位,因此其运算过程相对较为复杂;而有符号的浮点小数在编码过程当中不只须要提供一个数位来表示其数值的正负,还须要多个数位来表示其小数点的位置,因此其运算过程更为复杂。
其实在大多数状况下咱们使用的都是有符号的数值,那么计算机到底如何存储如何运算呢?下面就来探讨一下计算机究竟是如何进行有符号数值运算的。
计算机中有符号数值编码方式存在三种形式——原码、反码和补码,下面一一简单介绍。
使用数码表示数值符号的方式称为原码。即在二进制数码序列中最高位表示符号位,使用0表示正号,1表示符号;除过符号位其余全部位表示数值的大小,这种表示数值的方式称为原码表示法。例如在8位的机器中1的原码为00000001,而-1的原码为10000001,其二进制数值中的左边最高位不一样。不难看出0存储两种原码表示方式00000000或10000000。从数学的角度去解释,可以使用一下公式得出原码:
整数的原码
N原=N (0≤N<2n-1)
N原=2n-1+|N| (-2n-1<N≤0)
定点小数的原码
N原=N (0≤N<1)
N原=20+|N| (-1<N≤0)
其中N表示一个n位的二进制机器数,n表示机器字长。
原码是有符号数据在计算机中的最简单的编码方式,主要用于输入输出数据,因为其与真值之间存储偏差,因此并不能直接参与运算。对于一个字长为n的机器,其可以表示的数据个数为2n个;其可以表示的无符号的数据范围为0~2n-1;其可以表示的有符号的数据范围为-2n-1+1~+2n-1-1。
再来看看原码是否可以参与运算?例如使用原码来计算十进制算式-1+1,以8位的机器为例,-1的原码为10000001,1的原码为00000001,10000001+00000001=100000010,将其结果转为十进制就是-2,显然是错误的。咱们来分析一下,为何?原码的最高位表示的是数值的符号,并不表示数值的大小,而上面的算式中将其做为数值的大小进行运算显示是错误的。因此得出一个结论:原码不能参与运算;若是非要强制运算,其符号位绝对不能参与运算,可是其结果的符号又该如何给定,须要比较原始数据的大小来给定。
就对上面的使用原码计算-1+1的例子来看,其结果是-2,显示是错误的。咱们知道-1+1=0,而经过原码计算后获得的结果为-2,主要是因为其符号位参与了运算致使错误的出现。计算机在处理数据时只能将其每一位做为数码进行运算,若是将符号位提取出来单独处理则过于复杂,通过研究也就出现了一种新的有符号数据表示方式——反码。
反码是计算机中表示数值的另外一种方式,主要用于表示负数。反码规定正数的反码形式与其原码形式相同;负数的反码形式是在其原码形式的基础上除过符号位按位取反的结果。这里的“取反”就是二进制中的逻辑非运算,即若是某一位上为1则取反后为0,若是为0则取反后为1。好比8位机器码00000001(1)的反码为00000001,10000001(-1)的反码为11111110。不难看出0存储两种反码表示方式00000000或11111111。从数学的角度去解释,可以使用一下公式得出反码:
整数的反码
N反=N (0≤N<2n-1)
N反=(2n-1)+N (-2n-1≤N≤0)
定点小数的反码
N反=N (0≤N<1)
N反=2-2-(n-1)+N (-1<N≤0)
其中N表示一个n位的二进制机器数,n表示机器字长。
反码主要是相对原码而言的,其表示数据的范围与原码一一对应,而反码与原码的区别就是其能够直接参与运算。下面来看反码如何参与运算,还以开头的例子为例,-1的反码是11111110,1的反码是00000001,其-1+1的反码运算就是11111110+00000001=11111111,其原码为10000000,换算为十进制就是-0。再来看使用反码计算1-2,在8位的机器中,原码形式为00000001+10000010,反码形式为00000001+11111101=11111110,其结果的原码为10000001,换算为有符号的十进制数值则为-1。显然能够当作反码能够解决原码符号位不能参与运算的问题。
或许你会发现,反码虽然解决了原码的本质问题(符号位不能参与运算),可是上面经过反码运算-1+1获得的结果为-0,然而这并不符号现实逻辑,由于现实中不存在正负零之分,虽然获得了想要的结果,可是并不合理。为了更合理的运算,就出现的另外一种数据表示方式——补码。什么是补码?暂且不说,且先看看“模”的概念。
在数学代数中,模表示一种代数体系,可视为一个环形的代数体系,最简单的模型就是“钟表”,在该计量器中,能够看到其所表示的量的范围为1~12(12个量),则其模为12。例如3点这个量,既能够看做12点逆转9个量,也能够看做12点正转3个量,也就是说,在钟表中3=12-9=12+(12-9)=15,能够将减去9的运算等价为加上3的运算。能够得出一个特色,在模内的减法运算均可以转化为对应的加法运算。从另外一个角度看,模为12的计量器中,3和15存储一个共同的特色,其除以12的余数都是3,这时称为3和15为同余的数,也成为互补的数。同余是模计量器中的一个概念,模中A、B两个数除以模数N获得的余数相同,则称为A、B同余。互补也是模计量器中的一个概念,在模N的计量器中,一个数A与N-A是一对互补的数,其特色是能够将减法转换成加法,例如X-A=X+(X-A)。
在计算机中模表示一种计量系统的计数范围,咱们知道对应一个n位的机器,其计量范围为0~2n-1(共2n个量),则其模就是2n。咱们能够看出计算机中模的概念与钟表的模型很是相似,借助能够将减法转换为加法的思路,为了进一步简化计算机中的电路设计,因此就诞生了补码的概念。
补码是计算机中表示有符号数值的一种方式,补码表示方式规定正数的补码形式也其原码形式一致;负数的补码形式是在其反码的数值位(除符号位外)末位加1,而且丢弃最高进位。例如8位的机器中,1的原码为00000001,其补码也为00000001;而-1的原码为10000001,其反码为11111110,其补码为11111111,能够看出0只存储一种补码。因为0的补码只有一种方式,因此多出一中数值量,规定使用-128来代替原有的负零(-128并无对应的原码和反码,其实质是一种溢出的数值100000000),因此在8为的机器中其补码的表示数据范围为-128~0~127;也就是说对于n位的机器,其补码的表示范围与原码和反码稍有不一样,为-2n~0~2n-1(共2n个数值量)。从数学的角度去解释,可以使用一下公式得出补码:
整数的补码
N补=N (0≤N<2n-1)
N补=2n+N (-2n-1≤N≤0)
定点小数的补码
N补=N (0≤N<1)
N补=2+N (-1≤N<0)
其中N表示一个n位的二进制机器数,n表示机器字长。
补码是根据反码得出来的,主要经过互补的概念衍生的,补码的应用可以使计算机二进制运算进一步简化,并且符号位能够参与运算,比反码更为合理。来看一下-1+1的补码运算,其原码形式为10000001+00000001,其反码形式为11111110+00000001,其补码形式为11111111+00000001=100000000,转换为反码为11111111,转换为原码则为00000000,即0。
从上面的例子能够看出补码的运算比反码的运算更为合理,因此在计算机中全部的数码均以补码的方式进行表示或存储,以补码的方式进行运算。
在计算机中所表示数值的范围与机器字长有关,而在编程语言中所表示的数据范围与规定字节有关。计算机中对有符号的数值编码方式分为原码、反码和补码三种,其中主要使用补码进行数据的运算和存储,因为补码表示法中能够将符号位直接参与运算,同时还能将全部的减法运算转化为加法运算。
原码规定有符号的二进制数据的最高位(第n位)为符号位,其他n-1位为数值位;若是符号位为0则表示真值为正数,若是符号位为1则表示真值为负数。
反码规定真值为正数时其反码与原码相同;真值为负数时其反码为原码基础上除符号位外逐位取反。
补码规定真值为正数时其补码与原码相同;真值为负数时补码为反码基础上最低位加1,并舍弃符号位进位(不能超过机器字长)。
对于一个正数其原码、反码、补码与其数值位彻底相同;对于一个负数其符号位为1不变,原码的数值位与其数值位相同,反码的数值位为其数值位各位取反,补码在反码的最低位加1。
数据的反码的反码等于该数据的原码;数据的补码的补码等于该数据的原码。
在计算机内部,带符号的数据均使用补码的方式表示,使用补码形式进行运算后结果也是补码形式,如需获得真值,须要转换。若是结果的符号位为0,则将0转换为正号(“+”),数值位不变;若是结果的符号位为1,则将0转换为负号(“-”),数值位或者减1求反或者求反加1。
关于定点数的运算,相对较为简单,只须要将其补码形式进行运算便可。好比计算3-5,下面以8位机器为例,首先看一下其3和5对应的原码、反码、补码对应列表:
真值 | 原码 | 反码 | 补码 |
3 | 00000011 | 00000011 | 00000011 |
-5 | 10000101 | 11111010 | 11111011 |
计算3-5实质就是计算3与-5的补码和,3-5=3+(-5)=00000011+11111011=11111110,转换为反码为11111101,再转换为原码则为10000010,即为十进制的-2。
计算机中定点数的运算均是将其对应的补码进行和运算,而后将结果在转换为原码便可得出最终运算结果。
浮点数的运算,相对较为复杂,这里简单介绍一下浮点数的运算思路。
浮点数主要有阶码和尾码组成,阶码表示了浮点数的数值范围,而尾码表示了浮点数的数值精度,因此若是其阶码不一样则没法参与运算。当参与运算的浮点数的阶码相同时,则直接将其尾码进行对应补码的运算便可,最后将结果在转换为对应的原码则就是其最终结果;当参与运算的浮点数的阶码不一样时,首先要进行对阶操做,也就是将其按某一个精度转换为相同的阶码(过程就是除以或乘以21),而后再将其尾码进行对应补码的运算,最后将结果在转换为对应的原码则就是其最终结果。
“溢出”是计算机中经常使用的术语,简单的将就是某个值不能被计算机内存所表示,某个值二进制数码超出了机器所能容纳的最大位数。准确的说就是当两个有符号的数据进行运算时,获得的结果超出了当前机器能够表示的有符号的数据范围(对于一个n位的机器来讲,所能表示的有符号的数据范围为-2n-1+1~+2n-1-1,其中包括正负零,这里先不说正负零的问题),就出现了“溢出”的现象。那么如何解决溢出问题,这是机器的事情,这里不说,咱们须要有效的预防便可。
当加法运算过程当中出现“进位”时,可是该进位已经超出了数值位的长度时则会出现“上溢出”现象;当加法运算过程当中出现“借位”时,可是该借位已经超出了数值位的长度时则会出现“下溢出”现象。
计算机处理的信息包括数值、文件、符号、语音、图形、图像等。在计算机内部各类信息都必须以数字化的二进制编码形式传送、存储和加工,所以,无论是什么信息都应转化为二进制编码。编码的过程能够经过少许的二进制数位,经过必定的组合规则,表示出大量复杂多样的信息。如下主要介绍十进制数值编码、英文字符编码和中文字符编码三种编码方式,只是简单介绍,具体原理须自行深究。
计算机内部使用二进制表示全部的数据,而咱们习惯使用十进制。在数字系统中除了采用机器数表示二进制数之外,有时须要用若干位二进制数表示一位十进制数,以便能在数字系统中表示和使用十进制数,适应处理十进制数的须要,因此就诞生了一种使用二进制码表示十进制数的编码方案——BCD码。
BCD(Binary Coded Decimal)码是一种经过四位二进制码表示一位十进制数的编码方法。其特色是:四位二进制码自己的指就是其对应的十进制数码的真值。四位二进制各位的位权由高到低分别为23、22、21、20,所以也称为8421码。8421码与十进制数码的编码规则以下图:
例如,十进制的3的BCD码为0011,十进制的931的BCD码为1001 0011 0001。这是一种编码方式,并不是其二进制原码表示方式。若是计算机使用BCD码进行十进制数值编码,那么其在计算机中的编码存储方式将以BCD码存储,计算机须要内置对应的BCD码编码和解码算法来实现其处理过程。
由于计算机采用高低电平来分别模拟1和0两个数码,因此计算机只能存储和传输二进制数码。为了可以使用一种统一的方式表示数字字符(数字字符与数字是不一样的概念)、字母字符以及经常使用符号,因此就产生了另外一种国际化的标准编码方式——ASCII编码。
ASCII(美国标准信息交换码)是基于拉丁字母的一套电脑编码系统,能够对现代英语和其它西欧语言进行编码,是一种单字节字符编码方案,主要用于文本数据编码,用于计算机与计算机、计算机与外设之间传递信息。
ASCII规定使用8位(一个字节)二进制数码组合来表示128或256种可能的字符,因此称为单字节编码。标准的ASCII码最高位为0,使用7位二进制数码来表示全部的大小写字母、数字0-九、标点符号以及美式英语中使用的特殊控制字符。当固定最高位为0后,其他7位可能表示的有效字符为27=128个,分别对应十进制的0~127共128个数值。标准ASCII编码与字符对照表以下图:
其中第一行表示前四位编码,第一列表示后四位编码,其组合的编码对应的符号如图中×××部分,将其组合的结果转换为十进制数值的范围为0~127。其中0~31及127表明的33个字符是计算机的控制字符或通讯专用字符,32~126表明的95个字符称为可显字符(其中SP表示space空格符号),即有特定的图形显示。可显字符中48~57表示0~9十个数字,65~90表示26个大写英文字母,97~122表示26个小写英文字母,其它的表示一些常见标点符号和运算符等。例如字符串“Hello”使用ASCII编码后在内存单元中的编码为01001000 01100101 01101100 01101100 01101111。
因为标准的ASCII码只能表示128个符号,远远不能知足现实中的符号要求,因此后来就将标准ASCII码的最高位也用做编码位,这样就又多出了128个符号,这些符号称为扩展ASCII码,其可以对大部分的西欧符号进行表示。因为ASCII码通用性较为普遍,因此咱们将ASCII单字节编码的字符称为ASCII字符。
汉字的特色是象形文字,单字单音,并且数据很是庞大,字形复杂,要在计算机中以二进制序列的方式表示一个汉字,远远要比ASCII码复杂。因此规定汉字在输入、输出、存储和处理过程当中所使用的汉字编码均不相同。
计算机中汉字的表示一样须要使用固定的二进制进行编码,根据应用目的的不一样,汉字编码可分为外码、交换码、机内码和字形码四种方式。
外码也称为输入码,是用来将汉字输入到计算机中的一组键盘符号,即就是经过键盘输入的各类字符符号序列。经常使用的输入码有拼音码、五笔字型码、天然码、表形码、认知码、区位码和电报码等。
咱们知道汉字的输入方式(也成为输入法)存在多种多样,外码则是由汉字输入法管理的,例如使用拼音输入zhong1,表示“中”这个汉字,那么“zhong1”则就是汉字“中”的外码。外码只是一种识别汉字的编码方式,经过外码能够在输入法程序中找到合适的汉字,不论某一个汉字的外码如何变化,可是其机器码(二进制数码)是不变的,当咱们输入外码后会经过对应的算法程序将汉字转换为对应的机器码。
计算机中以二进制代码的方式表示一个汉字,而二进制代码使用起来并不方便,因此须要使用一种方便的编码来与二进制编码进行映射,因而就出现了交换码。汉字信息交换码简称为“国标码”即GB2312-80编码标准,该标准中收入了6763个经常使用汉字(其中一级汉字3755个,二级汉字3008个),以及英、俄、日文字母与其余符号687个,一共7000多个符号。
国标码的编码规则是:每一个汉字由一个2字节(16位二进制)编码组成,每一个字节的最高位置“0”,其他7位用于组成各类不一样的码值。为了避免与ASCII码的控制字符相同,每一个字节剔除了34个ASCII码的控制字符,每一个字节还剩94个编码。两个字节组成一个二维结构,前一个字节称“区”,后一个字节称“位”,因此国标码也称为区位码,一共能够表示94×94个即8836个汉字以及其余符号。已被占用7000多个符号,剩余的位置做为备用。
汉字的机器码是计算机内部存储和处理汉字的代码,简称“内码”。内码描述的是计算机中汉字的实际表示方式。机内码是计算机内部存储和加工汉字时所用的代码。无论用何种汉字输入码将汉字输入计算机,为存储和处理方便,都需将各类输入码转换成长度一致的汉字内部码。
汉字信息机内码编码规则:在国标码的基础上,把2个字节的最高位一概由“0”改“1”构成。若最高位为“1”,视为汉字编码,为“0”,视为ASCII字符。所以,同一个汉字的交换码和机内码并不相同,而同一个ASCII字符的交换码和机内码则相同。
汉字字形码是汉字输出码,是汉字显示、打印的图形编码,又称为字模码。计算机在输出汉字时都采用图形方式,无聊汉字的笔画多少,每一个汉字均可以写在一样大小的方块中。一般使用16×16点阵方式来显示汉字。
计算机经过电子元件电平的高低来模拟二进制数码1和0,存储在计算机中的任何信息都必须以二进制数码的方式出现才能完成处理工做,原始的二进制数码序列称为信息的机器码,二进制数码经过补码的方式才能完美的进行运算。为了可以描述更多的符号信息,出现了各类符号信息的编码规范,编码是将任何一个符号转换为计算机能识别的二进制数码序列的过程。
再说后话,本篇的内容或许对大多数的人来讲都是“班门弄斧”,笔者是半道入行IT的,对计算机基础知识了解甚少(不明说,你懂得),这些内容都是笔者经过各类文献资料总结的,不对的地方确定有,因此但愿你们不要见笑,多多喷墨……