当前位置:首页 » 服务存储 » 计算机系统存储编码
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

计算机系统存储编码

发布时间: 2022-05-20 12:24:06

① 32位计算机内存地址编码范围

对于32位的计算机,其内存地址编码范围是0*0000000~0*FFFFFFFF,其中,0*的意思是0x,是16进制数表示的前缀,意思是这个数是16进制数.
32位系统支持多大内存?一般32位系统只支持最大3.25G内存(通常是3G上下)。如果让32位系统支持4G以上大内存,其实也其他方法,只需安装一个PrimoRamdisk
虚拟内存盘软件!
需要注意:Win7等32位系统无法使用4G内存的原因及解决方法:
http://wenku..com/view/58daabeef8c75fbfc77db2c2.html

② 在计算机内存中,存储每个ASCII 码字符编码需用( )个位拜托各位了 3Q

号从0开始到127,所以答案是7位二进制没有错。但由于浪费了1位,所以又进行了改进,添加了一些制表符,从而将8位全部使用,而现在的计算机系统中使用的ascii,全部使用扩展的ascii,但平时不再说扩展ascii码。都称为ascii。所以说8位也没有错。这道题有一个时间概念没有说明,估计是编书的人都是在抄袭别人的说法,将早期的题目延续至今。若题目前面加上时间定语“当今”或“现在”,该题的答案就只能是8位二进制。原因是现在的计算机只能一次访问一个字节。字节是存储设备的最小单位。而早期不是如此。

麻烦采纳,谢谢!

③ 字符在计算机中的存储形式

字符在计算机内存放,应规定相应的代表字符的二进制代码。代码的选用要与有关外围设备的规格取得一致。这些外围设备包括键盘控制台的输入输出、打印机的输出等等。字符作输入时,要自动转换为二进制代码存于机内;输出时,计算机内二进制代码自动转化为字符,两者的转换全是靠外围设备实现的。字符是数据结构中最小的数据存取单位。通常由8个二进制位(一个字节)来表示一个字符,但也有少数计算机系统采用6个二进制的字符表示形式。一个系统中字符集的大小,完全由该系统自己规定。[1]计算机可用字符一般为128~256个(不包括汉字时),每个字符进入计算机后,都将转换为8位二进制数。不同的计算机系统和不同的语言,所能使用的字符范围是不同的。
在 ASCII 编码中,一个英文字母字符存储需要1个字节。在 GB 2312 编码或 GBK 编码中,一个汉字字符存储需要2个字节。在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节。在UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。在UTF-32编码中,世界上任何字符的存储都需要4个字节。[3]
表达
字符是可使用多种不同字符方案或代码页来表示的抽象实体。例如,Unicode UTF-16 编码将字符表示为 16 位整数序列,而 Unicode UTF-8 编码则将相同的字符表示为 8 位字节序列。[3]微软的公共语言运行库使用 Unicode UTF-16(Unicode 转换格式,16 位编码形式)表示字符。
作用
针对微软公共语言运行库的应用程序使用编码将字符表示形式从本机字符方案映射至其他方案。应用程序使用解码将字符从非本机方案映射至本机方案。
电脑和通讯设备会使用字符编码的方式来表达字符。意思是会将一个字符指定给某个东西。传统上,是代表整数量的位元序列,如此,则可透过网络来传输,同时亦便于储存。两个常用的例子是ASCII和用于统一码的UTF-8。根据谷歌的统计,UTF-8是最常用于网页的编码方式。相较于大部分的字符编码把字符对应到数字或位元串,摩斯密码则是使用不定长度的电子脉冲的序列来表现字符

④ 在计算机系统中,应用最为广泛的字符编码是什么

在电脑系统中,应用最为广泛的字符编码是ASCII码。
美国信息交换标准码是由美国国家标准学会(American
National
Standard
Institute,ANSI)制定的,标准的单字节字符编码方案,用于基于文本的数据。起始于50年代后期,在1967年定案。它最初是美国国家标准,供不同计算机在相互通信时用作共同遵守的西文字符编码标准,它已被国际标准化组织(ISO)定为国际标准,称为ISO646标准。适用于所有拉丁文字字母。
ASCII码使用指定的7位或8位二进制数组合来表示128或256种可能的字符。标准ASCII码也叫基础ASCII码,使用7位二进制数来表示所有的大写和小写字母,数字0到9、标点符号,以及在美式英语中使用的特殊控制字符(这里需要特别注意:ASCII码与标准ASCII码的位数上的区分,标准ASCII码是7位二进制表示)。在电脑里,数字和字母都是用ASCII码来存储的,这就是为什么一个英文字母或半角的数字、标点符号通常占一个字节的原因。
由于电路的复杂性因素,电脑里都使用二进制数,它只有0和1两个数码,逢二进一,最容易用电路来表达,比如0代表电路不通,1代表电路通畅。我们平时用电脑时感觉不到它是在用二进制计算是因为电脑会把你输入的信息自动转换成二进制,算出的二进制数再转换成你能看到的信息显示到屏幕上。文字和数字与二进制数之间的转换一般就靠ASCII码来操作。

⑤ 汉字在汉字在计算机中的存储编码

汉字信息处理系统一般包括编码、输入、存储、编辑、输出和传输。编码是关键。不解决这个问题,汉字就不能进入计算机。
汉字进入计算机的三种途径
分别为:
①机器自动识别汉字:计算机通过“视觉”装置(光学字符阅读器或其他),用光电扫描等方法识别汉字。
②通过语音识别输入:计算机利用人们给它配备的“听觉器官”,自动辨别汉语语音要素,从不同的音节中找出不同的汉字,或从相同音节中判断出不同汉字。
③通过汉字编码输入:根据一定的编码方法,由人借助输入设备将汉字输入计算机。
机器自动识别汉字和汉语语音识别,国内外都在研究,虽然取得了不少进展,但由于难度大,预计还要经过相当一段时间才能得到解决。在现阶段,比较现实的就是通过汉字编码方法使汉字进入计算机。

⑥ 字母“a”的ASCII码是“1100001”,那么字母“b”在计算机存储器中是

字母“a”的ASCII码是“1100001”,那么字母“b”在计算机存储器中是“1100010”。

ASCII 码使用指定的8 位二进制数组合来表示128 或256 种可能的字符。使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符。因为,字母“b”在字母“a”的后面,所以,为ASCII码1100001+1=1100010。

(6)计算机系统存储编码扩展阅读:

0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响 。32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。

65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。后128个称为扩展ASCII码。许多基于x86的系统都支持使用扩展(或“高”)ASCII。

⑦ 计算机中的数据和编码

计算机编码
在计算机用户中普遍存在的一个误解是计算机对数值计算的绝对准确性。也就是说,如果您做乘法:

3 × (1/3)
您本来期望的到一个准确的1这个结果。但是您发现计算机并没有给出这个结果,而却只是一个近似的值,类似于0.99999999923475。

这看起来似乎是系统的一个“臭虫”,但是更令人吃惊的是,对,计算机就是那样工作的(除了在计算机代数系统中)。这篇文章将详细解释这个问题。

位、字节、半字节和无符号整数
几乎所有的计算机用户都了解“ 位 ”的概念。在计算机中,通过开关变化设置表达值0或1。如果您有两个位可供选择,您可以很容易得到这样四个不同的状态:

00 01 10 11
如果您有三个位,您可以把它们表示成八种状态:

000 001 010 011 100 101 110 111
每当您增加一个位时,您将得到两倍的状态。

很多计算机使用八位来表示信息,有些则为多八位,例如16位,32位或64位。8位作为一个组通常被用作基础单位,并且使用另外一个词“比特”(byte)。计算机的处理器一次处理一个八位或八位的倍数个信息。储存器使用一个八位或多个八位来存储数据。

事实上,在一些情况下使用四位来处理问题会更方便,这种四位一组的数据通常被称为一个“nybble”。但实际上,更常用的是“比特”而不是“nybble”。

一个nybble可以为16种不同的情况编码,例如数字0到15。大体上,使用任何序列的排列来表示不同的16种状态是可以的,但在实际的应用通常是这样的:

0000 = 十进制0 1000 = 十进制8 0001 = 十进制1 1001 = 十进制9 0010 = 十进制2 1010 = 十进制10 0011 = 十进制3 1011 = 十进制11 0100 = 十进制4 1100 = 十进制12 0101 = 十进制5 1101 = 十进制13 0110 = 十进制6 1110 = 十进制14 0111 = 十进制7 1111 = 十进制15
这样的表示是很自然的,因为它符合我们所熟悉的十进制数表示方法。例如,给定一个十进制数:

7531
我们很自然地把它理解为:

7 × 1000 + 5 × 100 + 3 × 10 + 1 × 1
或者,使用10的幂来表示:

7 × 10 3 + 5 × 10 2 + 3 × 10 1 + 1 × 10 0
注意任何数(除了0)的0次幂都是1。

数据中的每个数字表示从0到9的值,这样我们有10个不同的数字,那就是我们把它称为“十进制”的原因。每个数字可以通过10的某次幂来决定它的位置。这听起来很复杂,但实际上并不是这样的。这正是当您读一个数字的使用认为是理所当然的事情,您甚至都不同仔细思考它。

类似地,使用二进制编码就像上面所说的那样,值13是这样编码的:

1101
每一个位置有两个数字可以选择,所以我们称它为“二进制”。因此,它们的位置是这样决定的:

1101 =
1 × 2 3 + 1 × 2 2 + 0 × 2 1 + 1 × 2 0 =
1 × 8 + 1 × 4 + 0 × 2 + 1 × 1 = 13(十进制)
注意这里使用了2的幂:1、2、4和8。痴迷于计算机的人通常可以记住2的从2到16次幂,这并不是因为他们的记忆力,而是因为它们大量的使用这些数字:

2 0 = 1 2 8 = 256 2 1 = 2 2 9 = 512 2 2 = 4 2 10 = 1 024 2 3 = 8 2 11 = 2 048 2 4 = 16 2 12 = 4 096 2 5 = 32 2 13 = 8 192 2 6 = 64 2 14 = 16 384 2 7 = 128 2 15 = 32 768 2 16 = 65 536
注意的是,根据公制单位,值2 10 = 1 024通常被提及为“kilo”(千),或简写成“K”,所以很多2的高次幂通常可以简写成:

2 11 = 2 K = 2 048 2 12 = 4 K = 4 096 2 13 = 8 K = 8 192 2 14 = 16 K = 16 384 2 15 = 32 K = 32 768 2 16 = 64 K = 65 536
同样的,值2 20 = 1 024 x 1 024 = 1 048 576通常被简写成“M”:

2 21 = 2 M 2 22 = 4 M
而2 30 曾被称为“吉”,或“G”。下面我们将会大量使用这些修饰符号。

有一个很微妙的话题。如果我们使用16位,我们可以得到65 536种不同的值,但是这些值是从0到65 535的。人们通常从1开始数数,但是计算机是从0开始计数的。因为这对它们来说更简便。这个小问题有时也会使得计算机混淆。

现在,我们得到了计算位的方法:

您只能在您所有的位的范围内进行算术操作。也即是说,如果您正在使用的是16位,那您不能对65 535或更大的数据进行操作,否则您将得到一个“数据溢出”的错误。这个术语表明,您正在进行的是“有限精度”的操作。
使用这种编码不能表示小数。您只能使用非小数的“整数”。
使用这种编码不能表示负数。所有的数字都是“无符号数”。
虽然有这种限制,但是在计算机中对于简单的增1计数来说,“无符号整数”还是十分有用的。它们对计算机来说是很容易处理的。通常计算机使用16位或32位无符号整数,通常被称为“整数(integer)”或“长整数(long integer)”。一个整数允许对从0到65 535的数据进行操作,而一个长整型允许对从0到4 294 967 295的数进行操作。

八进制和十六进制数
现在让我们讨论一些偏外的话题:对二进制数字的表示方法。计算机通常使用二进制来表达数据,但是在实际中如果使用像这样的二进制:

1001 0011 0101 0001
那将是一件痛苦的事,并且很容易出错。通常计算机使用一个基于二进制的表达方式:八进制,或更通常使用的,十六进制。

这一件听起来挺狡猾但实际上又很简单的事。如果不是这样的话,我们就不会这样使用了。在平常的十进制体系中,我们有10数字(0到9)按以下方式构成排列:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...
在八进制中,我们只有八个数字(0到7)按以下方式构成排列:

0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 22 23 24 25 26 ...
也即是说,八进制的“10”相当于十进制的“8”,八进制的“20”相当于十进制的“16”,以此类推。

在十六进制中,我们只有十六个数字(0到9,然后是从a到f)按以下方式构成排列:

0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 ...
也即是说,十六进制的“10”相当于十进制的“16”,十六进制的“20”相当于十进制的“32”。

这些表示数值的方法都是表位置的系统,但是它们使用的不是像十进制那样的10,而是分别使用8和16。例如:

八进制756
= 7 × 8 2 + 5 × 8 1 + 6 × 8 0
= 7 × 64 + 5 × 8 + 6 × 1
= 448 + 40 + 6 = 十进制494
十六进制3b2
= 3 × 16 2 + 11 × 16 1 + 2 × 16 0
= 3 × 256 + 11 × 16 + 2 × 1
= 768 + 176 + 2 = 十进制946
好了,如果您还不是那么明白,不用担心。我们想说明的是,对于八进制来说,他们刚好和3位二进制有一个完美的对应关系:

000 = 八进制0
001 = 八进制1
010 = 八进制2
011 = 八进制3
100 = 八进制4
101 = 八进制5
110 = 八进制6
111 = 八进制7
类似的,一个十六进制数刚好和一个4位的二进制数对应。

0000 = 十六进制0 1000 = 十六进制8 0001 = 十六进制1 1001 = 十六进制9 0010 = 十六进制2 1010 = 十六进制a 0011 = 十六进制3 1011 = 十六进制b 0100 = 十六进制4 1100 = 十六进制c 0101 = 十六进制5 1101 = 十六进制d 0110 = 十六进制6 1110 = 十六进制e 0111 = 十六进制7 1111 = 十六进制f
因此,把一个很长的二进制数转换成一个八进制就变得很简便,例如:把二进制1001001101010001转化成八进制:

1 001 001 101 010 001 二进制 = 111521 八进制
转换成十六进制会更简单:

1001 0011 0101 0001 = 9351 十六进制
但是要把它转换成十进制(37 713)就比较麻烦了。八进制和十六进制使得转换二进制机器级的数字变得简单方便。

有符号整数和补码
在定义了无符号二进制数后,我们就要着手定义负数了,或称为“有符号整数”。最简单的一个方法是保留一个位来表示数值的符号。这个“符号位”可以位于数值的最左边,当然也可以位于数值的最右边。如果这个符号位为0,表示数值是正的,如果这个符号位为1,表示数值是负的。

这样做是可以的,虽然从人类的角度来看是最明显的解决方案,但是它对于计算机来说有可能带来一些难度。例如,这种编码使得0可以有正负两种。人们可能对此感到不可思议,但是这对计算机来说是适应的。

对计算机来说,更自然的表达方式是对给定的位数的二进制数按其范围分成两半,其中前一半用来表示负数。例如,在4位数值中,你可以得到:

0000 = 十进制0 0001 = 十进制1 0010 = 十进制2 0011 = 十进制3 0100 = 十进制4 0101 = 十进制5 0110 = 十进制6 0111 = 十进制7 1000 = 十进制-8 1001 = 十进制-7 1010 = 十进制-6 1011 = 十进制-5 1100 = 十进制-4 1101 = 十进制-3 1110 = 十进制-2 1111 = 十进制-1
现在我们得到了一个“有符号整数”数字系统,使用所知道的,为了一些不是很重要的原因,“补码”编码方式。对16位有符号数字编码来说,我们可以得到范围为-32 768到32 767的有符号数字。对一个32位的有符号编码系统来说,我们可以为从-2 147 483 648到2 147 482 647的数编码。

与只改变符号位来表示负数的编码方式相比,“补码”编码方式与之有所不同。例如对于-5来说,只对符号位编码,应该是:

1101
但是对于“补码”编码方式来说,则是:

1011
这对于符号编码来说是-3。关于为什么计算机要使用补码这种编码方式我们会在后面解释。

所以,现在我们可以以二进制方式来表示正负两种不同的数值。请记住对于一个二进制数来说,只有两种解释方式。如果在内存中有一个这样的二进制数值:

1101
-- 这只能解释为十进制的“13”或“-3”。

定点小数
这种格式通常被用于商业计算(例如在电子表格或COBOL中);因为在这里,丢弃小数位来记录金钱是不能接受的。因此了解二进制如何存贮小数是十分有用的。

首先去我们必须决定要用多少位来存贮小数部分和多少位来存储整数部分。假设我们使用32位来表示这种格式,那么我们用16位表示整数部分,16位来表示小数部分。

小数部分怎么使用呢?这沿用了表示整数的方式:如果8位接下来是4位,是2位,1位,那么当然接下来就是半位,1/4位和1/8位等等了。

例如:

整数位 小数位 0.5 = 1/2 = 00000000 00000000.10000000 00000000 1.25 = 1 1/4 = 00000000 00000001.01000000 00000000 7.375 = 7 3/8 = 00000000 00000111.01100000 00000000
有一点棘手的是,如果您要表达1/5(十进制的0.2),那您不能得到精确的数值表达方式。最好的方法只能是:

13107/65536 = 00000000 00000000.00110011 00110011 = 0.1999969... 十进制
13108/65536 = 00000000 00000000.00110011 00110100 = 0.2000122... 十进制
然而不,您不能只样做,既是你有更多的数位来表达。问题是,一些小数使用二进制的方式不能精确地表达出来。除非您使用一个特殊的办法。这个特殊的办法是分别使用两个数字来表达小数:一个是分子,一个是分母。然后您可以使用学校学习的加、减、乘、除来得到它们。然而,这些方法不能表达更高级的数字(例如平方根),或者如果这两个分母的最小公倍数很大的话,那就难以使用。这就是使用定点小数表达小数的优点。

浮点小数
当我们使用了有符号和无符号的数值表达方式时。如果遇到连32位也不足以表达的大范围的数,或也许可以表达,但我们必须为此放弃小数位时,我们可以选择的以获得更大范围的数值的表达方式的方法是使用“浮点小数”格式而抛弃“定点小数”格式。

在十进制中,我们对以下的表达方式很熟悉:

1.1030402 × 10 5 = 1.1030402 × 100000 = 110304.02
或简写成:

1.1030402E5
这表示“1.103402乘以一个1后面跟着5个零的数”。我们可以得到一个确定的称谓“尾数”的数值(1.1030402),乘以一个10的某个幂级数(E5,表示10 5 或100 000),也就是“幂级数”。如果我们使用一个负的幂级数,那就意味着乘以该正级数的倒数。例如:

2.3434E-6 = 2.3434 × 10 -6 = 2.3434 × 0.000001 = 0.0000023434
使用这种定义的好处是我们可以得到更大范围的数值,虽然尾数部分的精确度受到影响。相似的原理可以应用于二进制中为计算机使用。人们设计了很多方式,但是作常用的是由美国电器和电子工程师协会定义的一种方法。它对64位浮点格式的定义是:

11位二进制表示指数,使用“超1023”格式。这种格式使得指数可以表示为0到2047的无符号数,但是在得到真实值前必须先减去1023;
52位尾数,使用无符号数字表示;
一个符号位;
下面我们使用一个例子来了解计算机如何使用内存的8位存储这些数字:

第0位: S x10 x9 x8 x7 x6 x5 x4 第1位: x3 x2 x1 x0 m51 m50 m49 m48 第2位: m47 m46 m45 m44 m43 m42 m41 m40 第3位: m39 m38 m37 m36 m35 m34 m33 m32 第4位: m31 m30 m29 m28 m27 m26 m25 m24 第5位: m23 m22 m21 m20 m19 m18 m17 m16 第6位: m15 m14 m13 m12 m11 m10 m9 m8 第7位: m7 m6 m5 m4 m3 m2 m1 m0
其中的“S”表示符号位,“X”表示指数位(阶码?),“m”表示尾数位。一旦这些数字被读取,它将转换成:

<符号> × (1 + <小数形式的尾数>) × 2 <阶码> - 1023
这个方式提供的数字范围为:

最大值 最小值
正数 1.797693134862231E+308 4.940656458412465E-324
负数 -4.940656458412465E-324 -1.797693134862231E+308

这种方式也定义了一些不是数字的值,例如“NaNs”(“不是一个数字”)。这通常用来返回表示数字溢出的信息。通常您不会碰到它,所以我们也不会对它进行进一步讨论。一些程序使用32位浮点小数。最普遍的是使用32位尾数,1位符号位,8位阶码和“超127”格式。它提供7位十进制数字。

第0位: S x7 x6 x5 x4 x3 x2 x1 第1位: x0 m22 m21 m20 m19 m18 m17 m16 第2位: m15 m14 m13 m12 m11 m10 m9 m8 第3位: m7 m6 m5 m4 m3 m2 m1 m0
数字转换时使用:

<符号> × (1 + <小数形式的尾数>) × 2 <阶码> - 127
它的范围为:

最大值 最小值
正数 3.402823E+38 2.802597E-45
负数 -2.802597E-45 -3.402823E+38

通常我们可以把32位的二进制浮点数称为“单精度”浮点数,而把64位的二进制浮点数称为“双精度”浮点数。如果我们使用real的时候,通常表示双精度的浮点数;而使用float的时候,我们通常指单精度的浮点数。

但是要记住的是,位是位,它们在计算机的存储是连续的,当计算机内存中有一个64位数据时,它可能是一个双精度的浮点数,也可能是两个单精度的浮点数,或4个有符号或无符号的整数,或其它8位的数据,这取决于计算机如何读取它们。如果计算机把4个无符号整数以双精度浮点小数方式读出的话,它可以得到一个双精度浮点小数,但这个数据可能是一个垃圾数据。

所以,现在虽然我们已经解决了正、负数的存贮方式,但是对于浮点数来说,仍然存在一些与整数一样的缺陷,例如:

像整数一样,浮点数也有范围。虽然我们得到了比整数要大得多的范围,但是仍然是有限的,如果您试图把两个很大的数乘起来,您可能会得到“数据上溢”的错误。而如果您把一个小的数字除以一个函大的数字,那就可能使得指数的数值出错,出现“数据下溢”的错误。通常把最大值称为“机器无穷”,因为它是计算机所能处理的最大的数字。
另一个问题是精度。虽然您有15位的数字来表示很大的数,但是挡对它进行四则运算的时候,它们可能不给您任何提示就把一些数字丢弃。这意味着,如果您把一个很小的数加到一个很大的数值上去的时候,由于这个数字太小,以至于15位或16位的精度都不能显示它,计算机就会把这个数字丢弃。如果您在做计算的时候得到一个十分奇怪的数字,您可以需要检查您的数据范围是否合适。
这意味着,如果您做浮点计算,较小的数字很可能被丢弃了。虽然这在平常来说并不明显,但是如果您是做要求很高的数学分析工作,这些错误可能会累积起来,以至于最后得到的结果十分不准确。
这个错误对进行数学研究的人来说十分重要,他们必须对误差十分了解,以及研究一些办法来减少误差,并且应该可以估计到误差的大小。
顺便说一句,“精度”问题与“范围”问题不同,前者指的是有关尾数的表示范围,后者指的是指数的表达范围。
另外一个不太明显的误差是由于浮点数的二进制和十进制并不完全相等。如果您操作的数好是2的幂级数的倒数,例如0.75,那是用二进制可以准确的标示为0.11,因为它刚好是1/2+1/4的值。可是不幸的是,您可能通常不会得到如此恰到好处的数字,这就是说,计算机会把一些数字丢掉,例如要表示0.1,只能使用无穷循环的二进制小数0.000110011……表示了。
如果您对这部分内容不理解,别担心。这里的要点是,计算机不是万能的,它只是一部机器,并要符合一定的规则和受到一定的限制。虽然很多人对计算机抱有孩子似的信任,但是在计算机虽好的解决方法下也有一些不可避免的不精确。

编程语言中的数
对于低级语言的编程者来说,他们要担心有符号和无符号、定点和浮点数的运算。他们必须使用十分不同的代码来实现操作。

但是,对高级语言的编程者来说,诸如LISP和 Python 提供了一些列诸如“有理数”、“复数”之类的抽象数据类型。而他们可以断言他们的系统可以使用数学操作做正确的运算。由于操作符重载,数学运算可以应用于任何数字——无论是有符号的、无符号的、有理数、定点小数、浮点小数或复数。

文本编码:ASCII和字符串
现在我们已经得到不同的方法来存储数据了,那么文本呢?我们怎么存储姓名、地址或写给朋友的信件呢?

当然,如果您还记得位是位的话,我们没有理由不能使用位来表达字母“A”或“?”获“Z”之类的。因为很多计算机每次处理一个字节,所以使用单字节的数据来表达单个字母会很方便。我们可以使用这个:

0100 0110 (hex 46)
来表示字母“F”。计算机使用这样的“字符编码”来向显示程序传送要求的文本。

下面是一个用来存储西方字母的标准二进制编码,就是通常所说的“美国信息交换标准码”(英文简称“ ASCII ”),下面的编码为ASCII编码,使用“d”表示十进制编码,“h”表示十六进制代码,“o”表示八进制代码:

ASCII码表 ______________________________________________________________________
ch ctl d h o ch d h o ch d h o ch d h o ______________________________________________________________________
NUL ^@ 0 0 0 sp 32 20 40 @ 64 40 100 ' 96 60 140 SOH ^A 1 1 1 ! 33 21 41 A 65 41 101 a 97 61 141 STX ^B 2 2 2 " 34 22 42 B 66 42 102 b 98 62 142 ETX ^C 3 3 3 # 35 23 43 C 67 43 103 c 99 63 143 EOT ^D 4 4 4 $ 36 24 44 D 68 44 104 d 100 64 144 ENQ ^E 5 5 5 % 37 25 45 E 69 45 105 e 101 65 145 ACK ^F 6 6 6 & 38 26 46 F 70 46 106 f 102 66 146 BEL ^G 7 7 7 ` 39 27 47 G 71 47 107 g 103 67 147
BS ^H 8 8 10 ( 40 28 50 H 72 48 110 h 104 68 150 HT ^I 9 9 11 ) 41 29 51 I 73 49 111 i 105 69 151 LF ^J 10 a 12 * 42 2a 52 J 74 4a 112 j 106 6a 152 VT ^K 11 b 13 _ 43 2b 53 K 75 4b 113 k 107 6b 153 FF ^L 12 c 14 44 2c 54 L 76 4c 114 l 108 6c 154 CR ^M 13 d 15 _ 45 2d 55 M 77 4d 115 m 109 6d 155 SO ^N 14 e 16 . 46 2e 56 N 78 4e 116 n 110 6e 156 SI ^O 15 f 17 / 47 2f 57 O 79 4f 117 o 111 6f 157
DLE ^P 16 10 20 0 48 30 60 P 80 50 120 p 112 70 160 DC1 ^Q 17 11 21 1 49 31 61 Q 81 51 121 q 113 71 161 DC2 ^R 18 12 22 2 50 32 62 R 82 52 122 r 114 72 162 DC3 ^S 19 13 23 3 51 33 63 S 83 53 123 s 115 73 163 DC4 ^T 20 14 24 4 52 34 64 T 84 54 124 t 116 74 164 NAK ^U 21 15 25 5 53 35 65 U 85 55 125 u 117 75 165 SYN ^V 22 16 26 6 54 36 66 V 86 56 126 v 118 76 166 ETB ^W 23 17 27 7 55 37 67 W 87 57 127 w 119 77 167
CAN ^X 24 18 30 8 56 38 70 X 88 58 130 x 120 78 170 EM ^Y 25 19 31 9 57 39 71 Y 89 59 131 y 121 79 171 SUB ^Z 26 1a 32 : 58 3a 72 Z 90 5a 132 z 122 7a 172 ESC ^[ 27 1b 33 ; 59 3b 73 [ 91 5b 133 { 123 7b 173 FS ^\ 28 1c 34 < 60 3c 74 \ 92 5c 134 124 7c 174 GS ^] 29 1d 35 = 61 3d 75 ] 93 5d 135 } 125 7d 175 RS ^^ 30 1e 36 > 62 3e 76 ^ 94 5e 136 ~ 126 7e 176 US ^_ 31 1f 37 ? 63 3f 77 _ 95 5f 137 DEL 127 7f 177 ______________________________________________________________________
上面这个列表的最左边有一个些奇怪的字符,例如“FF”和“BS”,这些都不是文本字符。相反,它们是控制字符,也就是说当这些字符发送到特定的设备时,它将产生一些动作。例如“FF”表示换页,或弹出;“BS”表示退格,而“BEL”表示一个响声。在一个文本编辑器中,它们会显示成一个白色或黑色的方块,或笑脸、音符或其它一些奇怪的符号。要打出这些字符,可以使用CTRL键和一个合适的代码。例如同时按住“CTRL”和“G”,或简写成“CTRL-G”或“^G”可以打出一个BEL字符。

上面这个ASCII码表示定义了128个字符,这意味着ASCII码只需要7位。但是,很多计算机都以字节为单位存储信息。这个额外的一位可以定义第二个128个字集,一个“扩展”字集。

在实际中,有很多不同的“扩展”字集,提供很多例如数学符号等的符号或非英语字符。这个扩展字集并没有进行标准化,并经常会引起混淆。

这个表格强调了这篇文章的主题:位就是位。这样的话,您可以使用位来表示字符。您可以把特殊的代码描述成特殊的十进制、八进制和十六进制,但是它们仍然是相同的代码。这些数值的表达,无论是十进制、八进制或十六进制,都只是相同的位的表达。

当然,您可能在一段话中表达很多的字符,例如:

Tiger tiger burning bright!
这只是简单的替换成ASCII码,表示成:

54 69 67 65 72 2c 20 74 69 67 65 72 20 62 75 ...
计算机把这种ASCII“字符串”以连续空间的“数组”来存储。一些应用程序可以包括一个二进制数值表示字符串的长度,但是更通常的做法是使用一个表示结尾的字符NULL(ASCII表中的0字符〕表示字符串的结束。

请参看:

⑧ 计算机内数的表示与编码

2、机器数的表示方法

a、原码

1、定义:正数的符号位用0表示,负数的符号位用1表示,数值部分用二进制形式表示,称为该数的原码。
比如: 则
X=+81 (X)原 =0 1010001
Y=-81 (Y)原 =1 1010001
符号位 数值
2、用原码表示一个数简单、直观、方便。但不能用它对两个同号数相减或两个异号数相加。

比如:将十进制数“+36”与“-45”的原码直接相加:
X=+36 (X)原 =00100100
Y=-45 (Y)原 =10101101

0 0 1 0 0 1 0 0……(+36)10+) 1 0 1 0 1 1 0 1……(-45)10
1 1 0 1 0 0 0 1……(-81)10
这显然是不对的。

b、反码

定义:正数的反码和原码相同,负数的反码是对该数的原码除符号位外各位取反,即“0”变“1”,“1”变“0”。

例如:X=+81,Y=-81

X)原 =0 1010001 (X)反= 0 1010001

Y)原 =1 1010001 (Y)反= 1 0101110
符号位 数值 符号位 数值

c、补码

1、定义:正数的补码与原码相同,负数的补码是对该数的原码除符号外各位取反,然后加1,即反码加1。
比如:X=+81,Y=-81 (X)原=(X)反=(X)补=01010001
(Y)原=11010001
(Y)反=10101110
(Y)补=10101111

2、计算机中,加减法基本上都采用补码进行运算,并且加减法运算都可以用加法来实现。
比如:计算十进制数:36-45,可 写成:36+(-45),即
(36)10 -(45)10 =(36)10+(-45)10
(36)原 =(36)反 = (36)补
= 00100100

(-45)原 = 10101101
(-45)反 = 11010010
(-45)补 = 11010011

0 0 1 0 0 1 0 0……(+36)10
+) 1 1 0 1 0 0 1 1……(-45)10
1 1 1 1 0 1 1 1……(-9)10
结果正确。

三、字符编码

所谓字符编码就是规定用怎样的二进制编码来表示文字和符号。它主要有以下几种:1、BCD码(二--十进制码);2、ASCII码;3、汉字编码。

1、BCD码(二--十进制码):
把十进制数的每一位分别写成二进制数形式的编码,称为二--十进制编码或BCD编码。BCD编码方法很多,但常用的是8421编码:它采用4 位二进制数表示1位十进制数,即每一位十进制数用四位二进制表示。这4位二进制数各位权由高到低分别是23、22、21、20,即8、4、2、1。这种编码最自然,最简单,且书写方便、直观、易于识别。

比如:十进制数1998的8421码为:
0001 1001 1001 1000

十进制: 1 9 9 8
8421码: 0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0
位权: 8 4 2 1 8 4 2 1 8 4 2 1 8 4 2 1

思考:
1、一个十进数的BCD码如何转换成十进制数?
2、一个十进制数的BCD码是该数的 二进制数吗?
3、一个十进制数的BCD码与二进制数之间如何相互转换?

2、ASCII码

ASCII码是计算机系统中使用得最广泛的一种编码(读作阿斯克伊码)。ASCII码虽然是美国国家标准,但它已被国际标准化组织(ISO)认定为国际标准。ASCII码已为世界公认,并在世界范围内通用。ASCII码有7位版本和8位版本两种。国际上通用的是7位版本。7位版本的ASCII码有128个元素,其中通用控制字符34个,阿拉伯数字10个,大、小写英文字母52个,各种标点符号和运算符号32个。

比如:“A”的ASCII码值为:1000001,即十进制的65;“a”的ASCII码值为:1100001,即十进制的97;“0”的ASCII码值为:0110000,即十进制的48。

3、汉字编码

我国用户在使用计算机进行信息处理时,都要用到汉字:汉字的输入,输出以及汉字处理。这就需要对汉字进行编码。通常汉字有两种编码:国标码和机内码。
a、国标码
计算机处理汉字所用的编码标准是我国于1980年颁布的国家标准(GB2312-80),是国家规定的用于汉字编码的依据,简称国标码。
国标码规定:用两个字节表示一个汉字字符。在国标码中共收录汉字和图形符号7445个。
国标码本身也是一种汉字输入码。通常称为区位输入法。

b、机内码
机内码是指在计算机中表示一个汉字的编码。
机内码是一种机器内部的编码,其主要作用是作为汉字信息交换码使用:将不同系统使用的不同编码统一转换成国标码 ,使不同的系统之间的汉字信息进行交换。
正是由于机内码的存在,输入汉字时就允许用户根据自己的习惯使用不同的汉字输入法,比如:五笔字型、自然码、智能拼音等,进入系统后再统一转换成机内码存储。

(4)汉字编码
西文是拼音文字,基本符号比较少,编码比较容易,因此,在一个计算机系统中,输入、内部处理、存储和输出都可以使用同一代码。汉字种类繁多,编码比拼音文字困难,因此在不同的场合要使用不同的编码。通常有4种类型的编码,即输入码、国标码、内码、字形码。

① 输入码

输入码所解决的问题是如何使用西文标准键盘把汉字输入到计算机内。有各种不同的输入码,主要可以分为三类:数字编码、拼音编码和字编型码。

● 数字编码。就是用数字串代表一个汉字,常用的是国标区位码。它将国家标准局公布的6763个两级汉字分成94个区,每个区分94位。实际上是把汉字表示成二维数组,区码、位码各用两位十进制数表示,输入一个汉字需要按4次键。数字编码是惟一的,但很难记住。比如“中”字,它的区位码以十进制表示为5448(54是区码,48是位码),以十六进制表示为3630(36是区码,30是位码)。以十六进制表示的区位码不是用来输入汉字的。

● 拼音编码。是以汉字读音为基础的输入方法。由于汉字同音字太多,输入后一般要进行选择,影响了输入速度。

● 字型编码。是以汉字的形状确定的编码,即按汉字的笔画部件用字母或数字进行编码。如五笔字型、表形码,便属此类编码,其难点在于如何拆分一个汉字。

② 国标码

又称为汉字交换码,在计算机之间交换信息用。用两个字节来表示,每个字节的最高位均为0,因此可以表示的汉字数为214=16384个。将汉字区位码的高位字节、低位字节各加十进制数32(即十六进制数的20),便得到国标码。例如“中”字的国标码为8680(十进制)或7468(十六进制)。这就是国家标准局规定的GB2312—80信息交换用汉字编码集。

③ 内码

汉字内码是在设备和信息处理系统内部存储、处理、传输汉字用的代码。无论使用何种输入码,进入计算机后就立即被转换为机内码。规则是将国标码的高位字节、低位字节各自加上128

为了统一表示世界各国的文字,1993年国际标准化组织公布了“通用多八位编码字符集”的国际标准ISO/IEC 10646,简称UCS(Universal Code Set),它为包括汉字在内的各种正在使用的文字规定了统一的编码方法。该标准使用4个字节来表示一个字符。其中,一个字节用来编码组,因为最高位不用,故总共表示128个组。一个字节编码平面,总共有256个平面,这样,每一组都包含256个平面。在一个平面内,用一个字节来编码行,因而总共有256行。再用一个字节来编码字位,故总共有256个字位。一个字符就被安排在这个编码空间的一个字位上。例如ASCII字符“A”,它的ASCII为41H,而在UCS中的编码则为00000041H,即位于00组、00面、00行的第41H字位上。又如汉字“大”,它在GB2312中的编码为3473H,而在UCS中的编码则为00005927H,即在00组、00面、59H行的第27H字位上。4个字节的编码足以包容世界上所有的字符,同时也符合现代处理系统的体系结构。

④ 字形码

表示汉字字形的字模数据,因此也称为字模码,是汉字的输出形式。通常用点阵、矢量函数等表示。用点阵表示时,字形码指的就是这个汉字字形点阵的代码。根据输出汉字的要求不同,点阵的多少也不同。简易型汉字为16�0�716点阵、提高型汉字为24�0�724点阵、48�0�748点阵等。现在我们以24�0�724点阵为例来说明一个汉字字形码所要占用的内存空间。因为每行24个点就是24个二进制位,存储一行代码需要3个字节。那么,24行共占用3�0�724=72个字节。计算公式:每行点数/8�0�7行数。依此,对于48�0�748的点阵,一个汉字字形需要占用的存储空间为48/8�0�748=6�0�748=288个字节。

(十进制)或80(十六进制)。例如,“中”字的内码以十六进制表示时应为F4E8。这样做的目的是使汉字内码区别于西文的ASCII,因为每个西文字母的ASCII的高位均为0,而汉字内码的每个字节的高位均为1。

⑨ 在计算机系统中输入的一切数据都是以( )编码方式储存的

计算机系统使用的存储方式都是以二进制编码方式实现的

⑩ 汉字在计算机系统中存储所用的编码是什么

机内码。

汉字机内码,又称“汉字ASCII码”,简称“内码”,指计算机内部存储,处理加工和传输汉字时所用的由0和1符号组成的代码。输入码被接受后就由汉字操作系统的“输入码转换模块”转换为机内码,与所采用的键盘输入法无关。

机内码是汉字最基本的编码,不管是什么汉字系统和汉字输入方法,输入的汉字外码到机器内部都要转换成机内码,才能被存储和进行各种处理。

(10)计算机系统存储编码扩展阅读:

因为汉字处理系统要保证中西文的兼容,当系统中同时存在ASCII码和汉字国标码时,将会产生二义性。

例如:有两个字节的内容为30H和21H,它既可表示汉字“啊”的国标码,又可表示西文“0”和“!”的ASCII码。为此,汉字机内码应对国标码加以适当处理和变换。

国标码的机内码为二字节长的代码,它是在相应国标码的每个字节最高位上加“1”,即

汉字机内码=汉字国标码+8080H

例如,上述“啊”字的国标码是3021H,其汉字机内码则是B0A1H。