﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-sunfruit[www.sunfruit.org]-随笔分类-基础知识</title><link>http://www.blogjava.net/sunfruit/category/7561.html</link><description>--我相信JAVA能走得更远 MSN:cuij7718@hotmail.com或sunfruit_cn@hotmail.com   QQ:316228067</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 11:58:00 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 11:58:00 GMT</pubDate><ttl>60</ttl><item><title>[转发]Java虚拟机的深入研究</title><link>http://www.blogjava.net/sunfruit/archive/2006/07/21/59470.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Fri, 21 Jul 2006 10:14:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/07/21/59470.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/59470.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/07/21/59470.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/59470.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/59470.html</trackback:ping><description><![CDATA[
		<div align="left">
				<p class="title" align="center">
						<strong>Java虚拟机的深入研究</strong>
				</p>
				<p align="center">作者：刘学超 </p>
				<p>
						<b>1  Java技术与Java虚拟机 </b>
				</p>
				<p class="normal">说起Java，人们首先想到的是Java编程语言，然而事实上，Java是一种技术，它由四方面组成: Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。它们的关系如下图所示： </p>
				<p align="center">
				</p>
				<p align="center">
						<img height="397" alt="" src="http://gceclub.sun.com.cn/staticcontent/html/2004-04-09/jvm01.gif" width="529" border="0" />图1  Java四个方面的关系 </p>
				<p class="normal">运行期环境代表着Java平台，开发人员编写Java代码(.java文件)，然后将之编译成字节码(.class文件)。最后字节码被装入内存，一旦字节码进入虚拟机，它就会被解释器解释执行，或者是被即时代码发生器有选择的转换成机器码执行。从上图也可以看出Java平台由Java虚拟机和Java应用程序接口搭建，Java语言则是进入这个平台的通道，用Java语言编写并编译的程序可以运行在这个平台上。这个平台的结构如下图所示：<img height="251" alt="" src="http://gceclub.sun.com.cn/staticcontent/html/2004-04-09/jvm02.gif" width="609" border="0" /></p>
				<p align="center">
				</p>
				<p class="normal">在Java平台的结构中, 可以看出，Java虚拟机(JVM) 处在核心的位置，是程序与底层操作系统和硬件无关的关键。它的下方是移植接口，移植接口由两部分组成：适配器和Java操作系统, 其中依赖于平台的部分称为适配器；JVM 通过移植接口在具体的平台和操作系统上实现；在JVM 的上方是Java的基本类库和扩展类库以及它们的API， 利用Java API编写的应用程序(application) 和小程序(Java applet) 可以在任何Java平台上运行而无需考虑底层平台, 就是因为有Java虚拟机(JVM)实现了程序与操作系统的分离，从而实现了Java 的平台无关性。 </p>
				<p class="normal">那么到底什么是Java虚拟机(JVM)呢？通常我们谈论JVM时，我们的意思可能是： </p>
				<ol>
						<li>对JVM规范的的比较抽象的说明； 
</li>
						<li>对JVM的具体实现； 
</li>
						<li>在程序运行期间所生成的一个JVM实例。 </li>
				</ol>
				<p class="normal">对JVM规范的的抽象说明是一些概念的集合，它们已经在书《The Java Virtual Machine Specification》（《Java虚拟机规范》）中被详细地描述了；对JVM的具体实现要么是软件，要么是软件和硬件的组合，它已经被许多生产厂商所实现，并存在于多种平台之上；运行Java程序的任务由JVM的运行期实例单个承担。在本文中我们所讨论的Java虚拟机(JVM)主要针对第三种情况而言。它可以被看成一个想象中的机器，在实际的计算机上通过软件模拟来实现，有自己想象中的硬件，如处理器、堆栈、寄存器等，还有自己相应的指令系统。 </p>
				<p class="normal">JVM在它的生存周期中有一个明确的任务，那就是运行Java程序，因此当Java程序启动的时候，就产生JVM的一个实例；当程序运行结束的时候，该实例也跟着消失了。下面我们从JVM的体系结构和它的运行过程这两个方面来对它进行比较深入的研究。 </p>
				<p>
						<b>2  Java虚拟机的体系结构 </b>
				</p>
				<p class="normal">刚才已经提到，JVM可以由不同的厂商来实现。由于厂商的不同必然导致JVM在实现上的一些不同，然而JVM还是可以实现跨平台的特性，这就要归功于设计JVM时的体系结构了。 </p>
				<p class="normal">我们知道，一个JVM实例的行为不光是它自己的事，还涉及到它的子系统、存储区域、数据类型和指令这些部分，它们描述了JVM的一个抽象的内部体系结构，其目的不光规定实现JVM时它内部的体系结构，更重要的是提供了一种方式，用于严格定义实现时的外部行为。每个JVM都有两种机制，一个是装载具有合适名称的类(类或是接口)，叫做类装载子系统；另外的一个负责执行包含在已装载的类或接口中的指令，叫做运行引擎。每个JVM又包括方法区、堆、Java栈、程序计数器和本地方法栈这五个部分，这几个部分和类装载机制与运行引擎机制一起组成的体系结构图为： </p>
				<p align="center">
				</p>
				<p align="center">
						<img height="299" alt="" src="http://gceclub.sun.com.cn/staticcontent/html/2004-04-09/jvm03.gif" width="589" border="0" />
						<br />图3  JVM的体系结构 </p>
				<p class="normal">JVM的每个实例都有一个它自己的方法域和一个堆，运行于JVM内的所有的线程都共享这些区域；当虚拟机装载类文件的时候，它解析其中的二进制数据所包含的类信息，并把它们放到方法域中；当程序运行的时候，JVM把程序初始化的所有对象置于堆上；而每个线程创建的时候，都会拥有自己的程序计数器和Java栈，其中程序计数器中的值指向下一条即将被执行的指令，线程的Java栈则存储为该线程调用Java方法的状态；本地方法调用的状态被存储在本地方法栈，该方法栈依赖于具体的实现。 </p>
				<p class="normal">下面分别对这几个部分进行说明。 </p>
				<p class="normal">执行引擎处于JVM的核心位置，在Java虚拟机规范中，它的行为是由指令集所决定的。尽管对于每条指令，规范很详细地说明了当JVM执行字节码遇到指令时，它的实现应该做什么，但对于怎么做却言之甚少。Java虚拟机支持大约248个字节码。每个字节码执行一种基本的CPU运算,例如,把一个整数加到寄存器,子程序转移等。Java指令集相当于Java程序的汇编语言。 </p>
				<p class="normal">Java指令集中的指令包含一个单字节的操作符,用于指定要执行的操作,还有0个或多个操作数,提供操作所需的参数或数据。许多指令没有操作数,仅由一个单字节的操作符构成。 </p>
				<pre>												虚拟机的内层循环的执行过程如下: 
do{ 
取一个操作符字节; 
根据操作符的值执行一个动作; 
}while(程序未结束)

				
				</pre>
				<p class="normal">由于指令系统的简单性,使得虚拟机执行的过程十分简单,从而有利于提高执行的效率。指令中操作数的数量和大小是由操作符决定的。如果操作数比一个字节大,那么它存储的顺序是高位字节优先。例如,一个16位的参数存放时占用两个字节,其值为: </p>
				<p class="normal">第一个字节*256+第二个字节字节码。 </p>
				<p class="normal">指令流一般只是字节对齐的。指令tableswitch和lookup是例外,在这两条指令内部要求强制的4字节边界对齐。 </p>
				<p class="normal">对于本地方法接口，实现JVM并不要求一定要有它的支持，甚至可以完全没有。Sun公司实现Java本地接口(JNI)是出于可移植性的考虑，当然我们也可以设计出其它的本地接口来代替Sun公司的JNI。但是这些设计与实现是比较复杂的事情，需要确保垃圾回收器不会将那些正在被本地方法调用的对象释放掉。 </p>
				<p class="normal">Java的堆是一个运行时数据区,类的实例(对象)从中分配空间，它的管理是由垃圾回收来负责的:不给程序员显式释放对象的能力。Java不规定具体使用的垃圾回收算法,可以根据系统的需求使用各种各样的算法。 </p>
				<p class="normal">Java方法区与传统语言中的编译后代码或是Unix进程中的正文段类似。它保存方法代码(编译后的java代码)和符号表。在当前的Java实现中,方法代码不包括在垃圾回收堆中,但计划在将来的版本中实现。每个类文件包含了一个Java类或一个Java界面的编译后的代码。可以说类文件是Java语言的执行代码文件。为了保证类文件的平台无关性,Java虚拟机规范中对类文件的格式也作了详细的说明。其具体细节请参考Sun公司的Java虚拟机规范。 </p>
				<p class="normal">Java虚拟机的寄存器用于保存机器的运行状态,与微处理器中的某些专用寄存器类似。Java虚拟机的寄存器有四种: </p>
				<ol>
						<li>pc: Java程序计数器； 
</li>
						<li>optop: 指向操作数栈顶端的指针； 
</li>
						<li>frame: 指向当前执行方法的执行环境的指针；。 
</li>
						<li>vars: 指向当前执行方法的局部变量区第一个变量的指针。 </li>
				</ol>
				<p class="normal">在上述体系结构图中，我们所说的是第一种，即程序计数器，每个线程一旦被创建就拥有了自己的程序计数器。当线程执行Java方法的时候，它包含该线程正在被执行的指令的地址。但是若线程执行的是一个本地的方法，那么程序计数器的值就不会被定义。 </p>
				<p class="normal">Java虚拟机的栈有三个区域:局部变量区、运行环境区、操作数区。 </p>
				<p>
						<b>局部变量区 </b>
				</p>
				<p class="normal">每个Java方法使用一个固定大小的局部变量集。它们按照与vars寄存器的字偏移量来寻址。局部变量都是32位的。长整数和双精度浮点数占据了两个局部变量的空间,却按照第一个局部变量的索引来寻址。(例如,一个具有索引n的局部变量,如果是一个双精度浮点数,那么它实际占据了索引n和n+1所代表的存储空间)虚拟机规范并不要求在局部变量中的64位的值是64位对齐的。虚拟机提供了把局部变量中的值装载到操作数栈的指令,也提供了把操作数栈中的值写入局部变量的指令。 </p>
				<p>
						<b>运行环境区 </b>
				</p>
				<p class="normal">在运行环境中包含的信息用于动态链接,正常的方法返回以及异常捕捉。 </p>
				<p class="normal">
						<b>动态链接</b>
				</p>
				<p class="normal">运行环境包括对指向当前类和当前方法的解释器符号表的指针,用于支持方法代码的动态链接。方法的class文件代码在引用要调用的方法和要访问的变量时使用符号。动态链接把符号形式的方法调用翻译成实际方法调用,装载必要的类以解释还没有定义的符号,并把变量访问翻译成与这些变量运行时的存储结构相应的偏移地址。动态链接方法和变量使得方法中使用的其它类的变化不会影响到本程序的代码。 </p>
				<p class="normal">
						<b>正常的方法返回</b>
				</p>
				<p class="normal">如果当前方法正常地结束了,在执行了一条具有正确类型的返回指令时,调用的方法会得到一个返回值。执行环境在正常返回的情况下用于恢复调用者的寄存器,并把调用者的程序计数器增加一个恰当的数值,以跳过已执行过的方法调用指令,然后在调用者的执行环境中继续执行下去。 </p>
				<p class="normal">
						<b>异常捕捉</b>
				</p>
				<p class="normal">异常情况在Java中被称作Error(错误)或Exception(异常),是Throwable类的子类,在程序中的原因是:①动态链接错,如无法找到所需的class文件。②运行时错,如对一个空指针的引用。程序使用了throw语句。 </p>
				<p class="normal">当异常发生时,Java虚拟机采取如下措施: </p>
				<ul>
						<li>检查与当前方法相联系的catch子句表。每个catch子句包含其有效指令范围,能够处理的异常类型,以及处理异常的代码块地址。 
</li>
						<li>与异常相匹配的catch子句应该符合下面的条件:造成异常的指令在其指令范围之内,发生的异常类型是其能处理的异常类型的子类型。如果找到了匹配的catch子句,那么系统转移到指定的异常处理块处执行;如果没有找到异常处理块,重复寻找匹配的catch子句的过程,直到当前方法的所有嵌套的catch子句都被检查过。 
</li>
						<li>由于虚拟机从第一个匹配的catch子句处继续执行,所以catch子句表中的顺序是很重要的。因为Java代码是结构化的,因此总可以把某个方法的所有的异常处理器都按序排列到一个表中,对任意可能的程序计数器的值,都可以用线性的顺序找到合适的异常处理块,以处理在该程序计数器值下发生的异常情况。 
</li>
						<li>如果找不到匹配的catch子句,那么当前方法得到一个"未截获异常"的结果并返回到当前方法的调用者,好像异常刚刚在其调用者中发生一样。如果在调用者中仍然没有找到相应的异常处理块,那么这种错误将被传播下去。如果错误被传播到最顶层,那么系统将调用一个缺省的异常处理块。 </li>
				</ul>
				<p>
						<b>操作数栈区 </b>
				</p>
				<p class="normal">机器指令只从操作数栈中取操作数,对它们进行操作,并把结果返回到栈中。选择栈结构的原因是:在只有少量寄存器或非通用寄存器的机器(如Intel486)上,也能够高效地模拟虚拟机的行为。操作数栈是32位的。它用于给方法传递参数,并从方法接收结果,也用于支持操作的参数,并保存操作的结果。例如,iadd指令将两个整数相加。相加的两个整数应该是操作数栈顶的两个字。这两个字是由先前的指令压进堆栈的。这两个整数将从堆栈弹出、相加,并把结果压回到操作数栈中。 </p>
				<p class="normal">每个原始数据类型都有专门的指令对它们进行必须的操作。每个操作数在栈中需要一个存储位置,除了long和double型,它们需要两个位置。操作数只能被适用于其类型的操作符所操作。例如,压入两个int类型的数,如果把它们当作是一个long类型的数则是非法的。在Sun的虚拟机实现中,这个限制由字节码验证器强制实行。但是,有少数操作(操作符dupe和swap),用于对运行时数据区进行操作时是不考虑类型的。 </p>
				<p class="normal">本地方法栈，当一个线程调用本地方法时，它就不再受到虚拟机关于结构和安全限制方面的约束，它既可以访问虚拟机的运行期数据区，也可以使用本地处理器以及任何类型的栈。例如，本地栈是一个C语言的栈，那么当C程序调用C函数时，函数的参数以某种顺序被压入栈，结果则返回给调用函数。在实现Java虚拟机时，本地方法接口使用的是C语言的模型栈，那么它的本地方法栈的调度与使用则完全与C语言的栈相同。 </p>
				<p>
						<b>3  Java虚拟机的运行过程 </b>
				</p>
				<p class="normal">上面对虚拟机的各个部分进行了比较详细的说明，下面通过一个具体的例子来分析它的运行过程。 </p>
				<p class="normal">虚拟机通过调用某个指定类的方法main启动，传递给main一个字符串数组参数，使指定的类被装载，同时链接该类所使用的其它的类型，并且初始化它们。例如对于程序： </p>
				<pre>												class HelloApp 
{
	public static void main(String[] args) 
	{
		System.out.println("Hello World!"); 
		for (int i = 0; i &lt; args.length; i++ )
		{
			System.out.println(args[i]);
		}
	}
}

				
				</pre>
				<p class="normal">编译后在命令行模式下键入： java HelloApp run virtual machine </p>
				<p class="normal">将通过调用HelloApp的方法main来启动java虚拟机，传递给main一个包含三个字符串"run"、"virtual"、"machine"的数组。现在我们略述虚拟机在执行HelloApp时可能采取的步骤。 </p>
				<p class="normal">开始试图执行类HelloApp的main方法，发现该类并没有被装载，也就是说虚拟机当前不包含该类的二进制代表，于是虚拟机使用ClassLoader试图寻找这样的二进制代表。如果这个进程失败，则抛出一个异常。类被装载后同时在main方法被调用之前，必须对类HelloApp与其它类型进行链接然后初始化。链接包含三个阶段：检验，准备和解析。检验检查被装载的主类的符号和语义，准备则创建类或接口的静态域以及把这些域初始化为标准的默认值，解析负责检查主类对其它类或接口的符号引用，在这一步它是可选的。类的初始化是对类中声明的静态初始化函数和静态域的初始化构造方法的执行。一个类在初始化之前它的父类必须被初始化。整个过程如下：<br /></p>
				<p align="center">
				</p>
				<p align="center">
						<img height="610" alt="" src="http://gceclub.sun.com.cn/staticcontent/html/2004-04-09/jvm04.gif" width="702" border="0" />
						<br />图4：虚拟机的运行过程 </p>
				<p>
						<b>4  结束语 </b>
				</p>
				<p class="normal">本文通过对JVM的体系结构的深入研究以及一个Java程序执行时虚拟机的运行过程的详细分析，意在剖析清楚Java虚拟机的机理。 </p>
		</div>
<img src ="http://www.blogjava.net/sunfruit/aggbug/59470.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-07-21 18:14 <a href="http://www.blogjava.net/sunfruit/archive/2006/07/21/59470.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]JAVA基本数据类型的传递方式</title><link>http://www.blogjava.net/sunfruit/archive/2006/02/19/31497.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Sun, 19 Feb 2006 09:34:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/02/19/31497.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/31497.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/02/19/31497.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/31497.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/31497.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; --sunfruit 
<P>&nbsp;&nbsp;&nbsp; java中的基本的数据类型如int，float，long，String[这个是一个特殊的类，有基本的数据类型的特性]等，在方法的参数传递的时候不存在引用传递，只有值传递方式，下面有一个实例</P>
<P>&nbsp;&nbsp;&nbsp; public class&nbsp; Test<BR>{<BR>&nbsp;public Test()<BR>&nbsp;{<BR>&nbsp;&nbsp;int j=9;<BR>&nbsp;&nbsp;setInt(j);<BR>&nbsp;&nbsp;System.out.println(j);<BR>&nbsp;&nbsp;j=setInt(j);<BR>&nbsp;&nbsp;System.out.println(j);</P>
<P>&nbsp;&nbsp;String str2="abc";<BR>&nbsp;&nbsp;setString(str2);<BR>&nbsp;&nbsp;System.out.println(str2);<BR>&nbsp;&nbsp;str2=setString(str2);<BR>&nbsp;&nbsp;System.out.println(str2);</P>
<P>&nbsp;&nbsp;StringBuffer buff=new StringBuffer();<BR>&nbsp;&nbsp;buff.append("abcbuff");<BR>&nbsp;&nbsp;setStringBuffer(buff);<BR>&nbsp;&nbsp;System.out.println(buff.toString());<BR>&nbsp;}</P>
<P>&nbsp;public static void main(String[] args) <BR>&nbsp;{<BR>&nbsp;&nbsp;new Test();<BR>&nbsp;}<BR>&nbsp;private int setInt(int i)<BR>&nbsp;{<BR>&nbsp;&nbsp;i+=2;<BR>&nbsp;&nbsp;return i;<BR>&nbsp;}<BR>&nbsp;private String setString(String str1)<BR>&nbsp;{<BR>&nbsp;&nbsp;str1+=" test";<BR>&nbsp;&nbsp;return str1;<BR>&nbsp;}</P>
<P>&nbsp;private StringBuffer setStringBuffer(StringBuffer buff1)<BR>&nbsp;{<BR>&nbsp;&nbsp;buff1.append(" test");<BR>&nbsp;&nbsp;return buff1;<BR>&nbsp;}<BR>}</P>
<P>运行结果</P>
<P>9<BR>11<BR>abc<BR>abc test<BR>abcbuff test</P>
<P>&nbsp;&nbsp;&nbsp; 可以看到基本数据类型的传递方式是值传递</P><img src ="http://www.blogjava.net/sunfruit/aggbug/31497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-02-19 17:34 <a href="http://www.blogjava.net/sunfruit/archive/2006/02/19/31497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>原码、补码和反码</title><link>http://www.blogjava.net/sunfruit/archive/2006/02/19/31493.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Sun, 19 Feb 2006 09:30:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/02/19/31493.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/31493.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/02/19/31493.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/31493.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/31493.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; --sunfruit 
<P>&nbsp;&nbsp;&nbsp; 说明了原码、补码和反码的关系以及算法</P>
<TABLE class=center_tdbgall id=table5 style="WORD-BREAK: break-all" cellSpacing=0 cellPadding=0 width=760 align=center border=0>
<TBODY>
<TR vAlign=center align=middle>
<TD class=main_ArticleTitle style="WORD-BREAK: break-all" height=50><FONT size=6>原码、补码和反码</FONT></TD></TR>
<TR vAlign=center align=middle>
<TD class=main_ArticleSubheading style="WORD-BREAK: break-all"></TD></TR>
<TR>
<TD class=main_NeiRong_760 id=fontzoom style="WORD-BREAK: break-all" vAlign=top height=300>&nbsp; 
<TABLE id=table6 cellSpacing=1 cellPadding=4 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top>
<DIV class=content>
<TABLE id=table7 width="100%" border=0>
<TBODY>
<TR>
<TD><SPAN style="FONT-FAMILY: 宋体"><B><FONT color=#9966ff size=5 font>（</FONT></B></SPAN><FONT color=#9966ff size=5 font><B><SPAN lang=EN-US>1</SPAN><SPAN style="FONT-FAMILY: 宋体">）原码表示法</SPAN></B></FONT> 
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">原码表示法是机器数的一种简单的表示法。其符号位用</SPAN><SPAN lang=EN-US>0</SPAN><SPAN style="FONT-FAMILY: 宋体">表示正号，用：表示负号，数值一般用二进制形式表示。设有一数为</SPAN><SPAN lang=EN-US>x</SPAN><SPAN style="FONT-FAMILY: 宋体">，则原码表示可记作［</SPAN><SPAN lang=EN-US>x</SPAN><SPAN style="FONT-FAMILY: 宋体">］<SUB>原</SUB>。</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">例如，</SPAN><SPAN lang=EN-US>X<SUB>1</SUB>= </SPAN><SPAN style="FONT-FAMILY: 宋体">＋</SPAN><SPAN lang=EN-US>1010110</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; X<SUB>2</SUB>= </SPAN><SPAN style="FONT-FAMILY: 宋体">一</SPAN><SPAN lang=EN-US>1001010</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">其原码记作：</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">［</SPAN><SPAN lang=EN-US>X<SUB>1</SUB></SPAN><SPAN style="FONT-FAMILY: 宋体">］<SUB>原</SUB></SPAN><SPAN lang=EN-US>=[</SPAN><SPAN style="FONT-FAMILY: 宋体">＋</SPAN><SPAN lang=EN-US>1010110]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">原</SPAN></SUB><SPAN lang=EN-US>=01010110</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">［</SPAN><SPAN lang=EN-US>X<SUB>2</SUB></SPAN><SPAN style="FONT-FAMILY: 宋体">］<SUB>原</SUB></SPAN><SPAN lang=EN-US>=[</SPAN><SPAN style="FONT-FAMILY: 宋体">－</SPAN><SPAN lang=EN-US>1001010]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">原</SPAN></SUB><SPAN lang=EN-US>=11001010</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">原码表示数的范围与二进制位数有关。当用</SPAN><SPAN lang=EN-US>8</SPAN><SPAN style="FONT-FAMILY: 宋体">位二进制来表示小数原码时，其表示范围：</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">最大值为</SPAN><SPAN lang=EN-US>0.1111111</SPAN><SPAN style="FONT-FAMILY: 宋体">，其真值约为（</SPAN><SPAN lang=EN-US>0.99</SPAN><SPAN style="FONT-FAMILY: 宋体">）</SPAN><SUB><SPAN lang=EN-US>10</SPAN></SUB></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">最小值为</SPAN><SPAN lang=EN-US>1.1111111</SPAN><SPAN style="FONT-FAMILY: 宋体">，其真值约为（一</SPAN><SPAN lang=EN-US>0.99</SPAN><SPAN style="FONT-FAMILY: 宋体">）</SPAN><SUB><SPAN lang=EN-US>10</SPAN></SUB></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN style="FONT-FAMILY: 宋体">当用</SPAN><SPAN lang=EN-US>8</SPAN><SPAN style="FONT-FAMILY: 宋体">位二进制来表示整数原码时，其表示范围：</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">最大值为</SPAN><SPAN lang=EN-US>01111111</SPAN><SPAN style="FONT-FAMILY: 宋体">，其真值为（</SPAN><SPAN lang=EN-US>127</SPAN><SPAN style="FONT-FAMILY: 宋体">）</SPAN><SUB><SPAN lang=EN-US>10</SPAN></SUB></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">最小值为</SPAN><SPAN lang=EN-US>11111111</SPAN><SPAN style="FONT-FAMILY: 宋体">，其真值为（－</SPAN><SPAN lang=EN-US>127</SPAN><SPAN style="FONT-FAMILY: 宋体">）</SPAN><SUB><SPAN lang=EN-US>10</SPAN></SUB></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">在原码表示法中，对</SPAN><SPAN lang=EN-US>0</SPAN><SPAN style="FONT-FAMILY: 宋体">有两种表示形式：</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">［</SPAN><SPAN lang=EN-US>+0</SPAN><SPAN style="FONT-FAMILY: 宋体">］<SUB>原</SUB></SPAN><SPAN lang=EN-US>=00000000</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</SPAN><SPAN style="FONT-FAMILY: 宋体">－</SPAN><SPAN lang=EN-US>0]<SUB> </SUB></SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">原</SPAN></SUB><SPAN lang=EN-US>=10000000</SPAN></FONT></P>
<P>　</P></TD></TR></TBODY></TABLE><FONT size=2><SPAN lang=EN-US>
<TABLE id=table8 cellSpacing=1 cellPadding=4 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top>
<DIV class=content><SPAN style="FONT-FAMILY: 宋体"><B><FONT color=#9966ff size=5 font>（</FONT></B></SPAN><FONT color=#9966ff size=5 font><B><SPAN lang=EN-US>2</SPAN><SPAN style="FONT-FAMILY: 宋体">）补码表示法</SPAN></B></FONT> 
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">机器数的补码可由原码得到。如果机器数是正数，则该机器数的补码与原码一样；如果机器数是负数，则该机器数的补码是对它的原码（除符号位外）各位取反，并在未位加</SPAN><SPAN lang=EN-US>1</SPAN><SPAN style="FONT-FAMILY: 宋体">而得到的。设有一数</SPAN><SPAN lang=EN-US>X</SPAN><SPAN style="FONT-FAMILY: 宋体">，则</SPAN><SPAN lang=EN-US>X</SPAN><SPAN style="FONT-FAMILY: 宋体">的补码表示记作［</SPAN><SPAN lang=EN-US>X</SPAN><SPAN style="FONT-FAMILY: 宋体">］<SUB>补</SUB>。</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">例如，</SPAN><SPAN lang=EN-US>[X1]=</SPAN><SPAN style="FONT-FAMILY: 宋体">＋</SPAN><SPAN lang=EN-US>1010110</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [X<SUB>2</SUB>]= </SPAN><SPAN style="FONT-FAMILY: 宋体">一</SPAN><SPAN lang=EN-US>1001010</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[X<SUB>1</SUB>]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">原</SPAN></SUB><SPAN lang=EN-US>=01010110</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [X<SUB>1</SUB>]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">补</SPAN></SUB><SPAN lang=EN-US>=01010110</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">即</SPAN><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [X<SUB>1</SUB>]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">原</SPAN></SUB><SPAN lang=EN-US>=[X<SUB>1</SUB>]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">补</SPAN></SUB><SPAN lang=EN-US>=01010110</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [X<SUB>2</SUB>]<SUB> </SUB></SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">原</SPAN></SUB><SPAN lang=EN-US>= 11001010</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [X<SUB>2</SUB>]<SUB> </SUB></SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">补</SPAN></SUB><SPAN lang=EN-US>=10110101</SPAN><SPAN style="FONT-FAMILY: 宋体">＋</SPAN><SPAN lang=EN-US>1</SPAN><SPAN style="FONT-FAMILY: 宋体">＝</SPAN><SPAN lang=EN-US>10110110</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">补码表示数的范围与二进制位数有关。当采用</SPAN><SPAN lang=EN-US>8</SPAN><SPAN style="FONT-FAMILY: 宋体">位二进制表示时，小数补码的表示范围：</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">最大为</SPAN><SPAN lang=EN-US>0.1111111</SPAN><SPAN style="FONT-FAMILY: 宋体">，其真值为（</SPAN><SPAN lang=EN-US>0.99</SPAN><SPAN style="FONT-FAMILY: 宋体">）</SPAN><SUB><SPAN lang=EN-US>10</SPAN></SUB></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">最小为</SPAN><SPAN lang=EN-US>1.0000000</SPAN><SPAN style="FONT-FAMILY: 宋体">，其真值为（一</SPAN><SPAN lang=EN-US>1</SPAN><SPAN style="FONT-FAMILY: 宋体">）</SPAN><SUB><SPAN lang=EN-US>10</SPAN></SUB></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN style="FONT-FAMILY: 宋体">采用</SPAN><SPAN lang=EN-US>8</SPAN><SPAN style="FONT-FAMILY: 宋体">位二进制表示时，整数补码的表示范围：</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">最大为</SPAN><SPAN lang=EN-US>01111111</SPAN><SPAN style="FONT-FAMILY: 宋体">，其真值为（</SPAN><SPAN lang=EN-US>127</SPAN><SPAN style="FONT-FAMILY: 宋体">）</SPAN><SUB><SPAN lang=EN-US>10</SPAN></SUB></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">最小为</SPAN><SPAN lang=EN-US>10000000</SPAN><SPAN style="FONT-FAMILY: 宋体">，其真值为（一</SPAN><SPAN lang=EN-US>128</SPAN><SPAN style="FONT-FAMILY: 宋体">）</SPAN><SUB><SPAN lang=EN-US>10</SPAN></SUB></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">在补码表示法中，</SPAN><SPAN lang=EN-US>0</SPAN><SPAN style="FONT-FAMILY: 宋体">只有一种表示形式：</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</SPAN><SPAN style="FONT-FAMILY: 宋体">＋</SPAN><SPAN lang=EN-US>0]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">补</SPAN></SUB><SPAN lang=EN-US>=00000000</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</SPAN><SPAN style="FONT-FAMILY: 宋体">＋</SPAN><SPAN lang=EN-US>0]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">补</SPAN></SUB><SPAN lang=EN-US>=11111111</SPAN><SPAN style="FONT-FAMILY: 宋体">＋</SPAN><SPAN lang=EN-US>1=00000000</SPAN><SPAN style="FONT-FAMILY: 宋体">（由于受设备字长的限制，最后的进位丢失）</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN style="FONT-FAMILY: 宋体">所以有</SPAN><SPAN lang=EN-US>[</SPAN><SPAN style="FONT-FAMILY: 宋体">＋</SPAN><SPAN lang=EN-US>0]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">补</SPAN></SUB><SPAN lang=EN-US>=[</SPAN><SPAN style="FONT-FAMILY: 宋体">＋</SPAN><SPAN lang=EN-US>0]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">补</SPAN></SUB><SPAN lang=EN-US>=00000000</SPAN></FONT></P>
<P class=MsoNormal>　</P>
<P>　</P></DIV></TD></TR></TBODY></TABLE>
<TABLE id=table9 cellSpacing=1 cellPadding=4 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top>
<DIV class=content><SPAN style="FONT-FAMILY: 宋体"><B><FONT color=#9966ff size=5 font>（</FONT></B></SPAN><FONT color=#9966ff size=5 font><B><SPAN lang=EN-US>3</SPAN><SPAN style="FONT-FAMILY: 宋体">）反码表示法</SPAN></B></FONT> 
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">机器数的反码可由原码得到。如果机器数是正数，则该机器数的反码与原码一样；如果机器数是负数，则该机器数的反码是对它的原码（符号位除外）各位取反而得到的。设有一数</SPAN><SPAN lang=EN-US>X</SPAN><SPAN style="FONT-FAMILY: 宋体">，则</SPAN><SPAN lang=EN-US>X</SPAN><SPAN style="FONT-FAMILY: 宋体">的反码表示记作［</SPAN><SPAN lang=EN-US>X</SPAN><SPAN style="FONT-FAMILY: 宋体">］<SUB>反</SUB>。</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">例如：</SPAN><SPAN lang=EN-US>X<SUB>1</SUB>= </SPAN><SPAN style="FONT-FAMILY: 宋体">＋</SPAN><SPAN lang=EN-US>1010110</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; X<SUB>2</SUB>= </SPAN><SPAN style="FONT-FAMILY: 宋体">一</SPAN><SPAN lang=EN-US>1001010</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">［</SPAN><SPAN lang=EN-US>X<SUB>1</SUB></SPAN><SPAN style="FONT-FAMILY: 宋体">］<SUB>原</SUB></SPAN><SPAN lang=EN-US>=01010110</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [X<SUB>1</SUB>]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">反</SPAN></SUB><SPAN lang=EN-US>=</SPAN><SPAN style="FONT-FAMILY: 宋体">［</SPAN><SPAN lang=EN-US>X<SUB>1</SUB></SPAN><SPAN style="FONT-FAMILY: 宋体">］<SUB>原</SUB></SPAN><SPAN lang=EN-US>=01010110</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [X<SUB>2</SUB>]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">原</SPAN></SUB><SPAN lang=EN-US>=11001010</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [X<SUB>2</SUB>]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">反</SPAN></SUB><SPAN lang=EN-US>=10110101</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">反码通常作为求补过程的中间形式，即在一个负数的反码的未位上加</SPAN><SPAN lang=EN-US>1</SPAN><SPAN style="FONT-FAMILY: 宋体">，就得到了该负数的补码。</SPAN></FONT></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><FONT size=2><SPAN style="FONT-FAMILY: 宋体">例</SPAN><SPAN lang=EN-US>1. </SPAN><SPAN style="FONT-FAMILY: 宋体">已知</SPAN><SPAN lang=EN-US>[X]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">原</SPAN></SUB><SPAN lang=EN-US>=10011010</SPAN><SPAN style="FONT-FAMILY: 宋体">，求</SPAN><SPAN lang=EN-US>[X]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">补</SPAN></SUB><SPAN style="FONT-FAMILY: 宋体">。</SPAN></FONT></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><FONT size=2><SPAN style="FONT-FAMILY: 宋体">分析如下：</SPAN></FONT></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><FONT size=2><SPAN style="FONT-FAMILY: 宋体">由</SPAN><SPAN lang=EN-US>[X]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">原</SPAN></SUB><SPAN style="FONT-FAMILY: 宋体">求</SPAN><SPAN lang=EN-US>[X]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">补</SPAN></SUB><SPAN style="FONT-FAMILY: 宋体">的原则是：若机器数为正数，则</SPAN><SPAN lang=EN-US>[X]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">原</SPAN></SUB><SPAN lang=EN-US>=[X]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">补</SPAN></SUB><SPAN style="FONT-FAMILY: 宋体">；若机器数为负数，则该机器数的补码可对它的原码（符号位除外）所有位求反，再在未位加</SPAN><SPAN lang=EN-US>1</SPAN><SPAN style="FONT-FAMILY: 宋体">而得到。现给定的机器数为负数，故有</SPAN><SPAN lang=EN-US>[X]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">补</SPAN></SUB><SPAN lang=EN-US>=[X]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">原</SPAN></SUB><SPAN style="FONT-FAMILY: 宋体">十</SPAN><SPAN lang=EN-US>1</SPAN><SPAN style="FONT-FAMILY: 宋体">，即</SPAN></FONT></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [X]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">原</SPAN></SUB><SPAN lang=EN-US>=10011010</SPAN></FONT></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [X]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">反</SPAN></SUB><SPAN lang=EN-US>=11100101</SPAN></FONT></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp; <U>&nbsp;&nbsp;</U></SPAN><U><SPAN style="FONT-FAMILY: 宋体">十）</SPAN> <SPAN style="FONT-FAMILY: 宋体">　　　　</SPAN><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></U></FONT></P>
<P>　</P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [X]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">补</SPAN></SUB><SPAN lang=EN-US>=11100110</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp; </SPAN></FONT></P>
<P>　</P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt"><FONT size=2><SPAN style="FONT-FAMILY: 宋体">例</SPAN><SPAN lang=EN-US>2. </SPAN><SPAN style="FONT-FAMILY: 宋体">已知</SPAN><SPAN lang=EN-US>[X]</SPAN><SUB><SPAN style="FONT-FAMILY: 宋体">补</SPAN></SUB><SPAN lang=EN-US>=11100110</SPAN><SPAN style="FONT-FAMILY: 宋体">，求［</SPAN><SPAN lang=EN-US>X</SPAN><SPAN style="FONT-FAMILY: 宋体">］<SUB>原</SUB>。</SPAN></FONT></P>
<P class=MsoNormal><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">分析如下：</SPAN></FONT></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">对于机器数为正数，则［</SPAN><SPAN lang=EN-US>X</SPAN><SPAN style="FONT-FAMILY: 宋体">］<SUB>原</SUB></SPAN><SPAN lang=EN-US>=</SPAN><SPAN style="FONT-FAMILY: 宋体">［</SPAN><SPAN lang=EN-US>X</SPAN><SPAN style="FONT-FAMILY: 宋体">］<SUB>补</SUB></SPAN></FONT></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">对于机器数为负数，则有［</SPAN><SPAN lang=EN-US>X</SPAN><SPAN style="FONT-FAMILY: 宋体">］<SUB>原</SUB></SPAN><SPAN lang=EN-US>=</SPAN><SPAN style="FONT-FAMILY: 宋体">［［</SPAN><SPAN lang=EN-US>X</SPAN><SPAN style="FONT-FAMILY: 宋体">］<SUB>补</SUB>］<SUB>补</SUB></SPAN></FONT></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><FONT size=2><SPAN style="FONT-FAMILY: 宋体">现给定的为负数，故有：</SPAN></FONT></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">［</SPAN><SPAN lang=EN-US>X</SPAN><SPAN style="FONT-FAMILY: 宋体">］<SUB>补</SUB></SPAN><SPAN lang=EN-US>=11100110</SPAN></FONT></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">［［</SPAN><SPAN lang=EN-US>X</SPAN><SPAN style="FONT-FAMILY: 宋体">］<SUB>补</SUB>］<SUB>反</SUB></SPAN><SPAN lang=EN-US>=10011001</SPAN></FONT></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <U>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</U></SPAN><U><SPAN style="FONT-FAMILY: 宋体">十）</SPAN><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; </SPAN></U></FONT></P>
<P>　</P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">［［</SPAN><SPAN lang=EN-US>X</SPAN><SPAN style="FONT-FAMILY: 宋体">］<SUB>补</SUB>］<SUB>补</SUB></SPAN><SPAN lang=EN-US>=10011010=</SPAN><SPAN style="FONT-FAMILY: 宋体">［</SPAN><SPAN lang=EN-US>X</SPAN><SPAN style="FONT-FAMILY: 宋体">］<SUB>原</SUB></SPAN></FONT></P></DIV></TD></TR></TBODY></TABLE></SPAN></FONT></DIV></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/sunfruit/aggbug/31493.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-02-19 17:30 <a href="http://www.blogjava.net/sunfruit/archive/2006/02/19/31493.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>