<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>Only the paranoid survive</title><link>http://computer.mblogger.cn/xiaoiiiyao/</link><description>记录下学习的过程，然后在过程中学习</description><dc:language>zh-CHS</dc:language><generator>RSS Generated by MBlogger Blogs</generator><item><dc:creator>xiaoiiiyao</dc:creator><title>[zz]windows service install</title><link>http://computer.mblogger.cn/xiaoiiiyao/posts/121676.aspx</link><pubDate>Sat, 27 Jun 2009 15:50:00 GMT</pubDate><guid>http://computer.mblogger.cn/xiaoiiiyao/posts/121676.aspx</guid><wfw:comment>http://computer.mblogger.cn/xiaoiiiyao/comments/121676.aspx</wfw:comment><comments>http://computer.mblogger.cn/xiaoiiiyao/posts/121676.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://computer.mblogger.cn/xiaoiiiyao/comments/commentRss/121676.aspx</wfw:commentRss><trackback:ping>http://computer.mblogger.cn/xiaoiiiyao/trackback.aspx?ID=121676</trackback:ping><description>&lt;P&gt;首先，我们要给windows service添加Installer。右键点击设计视图，选择Add Installer，VS将会为我们添加ProjectInstaller.cs，并在ProjectInstaller中添加组件serviceInstaller1和serviceProcessInstaller1，现在我们来修改他们的属性来控制Service的安装和启动选项。在ProjectInstaller得设计视图中选中serviceProcessInstaller1，将它得Account属性选为LocalSystem，这样以这个帐号服务启动。如果你希望系统启动时自动启动服务得话，将serviceInstaller1的StartType的属性选为Automatic，如果手动启动的话，选为manaul。&lt;BR&gt;其次，要安装service，我们要用到IntallUtil.exe这个程序，这个程序位于C：\WINDOWS\Microsoft.NET\Framework\v2.0.50727.点击开始菜单，选择&amp;#8220;运行&amp;#8221;，在运行对话框中输入cmd，进入到命令行窗口，输入cd ：\WINDOWS\Microsoft.NET\Framework\v2.0.50727，进入到这个目录，然后输入installutil F:\project\考试系统\项目代码\Service\GradeService\GradeService\bin\Debug\GradeService.exe， installutil后边的内容就是我们的工程生成的可执行程序的路径，可以根据你自己的实际情况进行修改。&lt;/P&gt;
&lt;P&gt;如果你给ServiceInstaller1的StartType设为Automatic的话，安装完服务，服务已经运行起来了，如果StartType是Manual的话，你需要手动启动。现在我们进入&amp;#8220;服务&amp;#8221;，要打开&amp;#8220;服务&amp;#8221;，请单击&amp;#8220;开始&amp;#8221;，指向&amp;#8220;设置&amp;#8221;，然后单击&amp;#8220;控制面板&amp;#8221;。依次单击&amp;#8220;性能和维护&amp;#8221;、&amp;#8220;管理工具&amp;#8221;，然后双击&amp;#8220;服务&amp;#8221;。在里边你应该能够看到我们制作的Service GradeService。在这里边，我们可以启动，关闭服务，还可以设置服务的启动类型。然后，我们看看服务有没有正确的写入日志，我们需要进入到事件查看器，要打开&amp;#8220;事件查看器&amp;#8221;，请单击&amp;#8220;开始&amp;#8221;，指向&amp;#8220;设置&amp;#8221;，然后单击&amp;#8220;控制面板&amp;#8221;。单击&amp;#8220;性能和维护&amp;#8221;，单击&amp;#8220;管理工具&amp;#8221;，然后双击&amp;#8220;事件查看器&amp;#8221;。如下图所示，我们的消息已经成功的写到了系统日志里了，下图。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;文章出处：&lt;A href="http://www.diybl.com/course/4_webprogram/asp.net/asp_netshl/2008414/110334_5.html"&gt;http://www.diybl.com/course/4_webprogram/asp.net/asp_netshl/2008414/110334_5.html&lt;/A&gt;&lt;/P&gt;</description></item><item><dc:creator>xiaoiiiyao</dc:creator><title>[zz]windows service 之调试过程 </title><link>http://computer.mblogger.cn/xiaoiiiyao/posts/121675.aspx</link><pubDate>Sat, 27 Jun 2009 15:50:00 GMT</pubDate><guid>http://computer.mblogger.cn/xiaoiiiyao/posts/121675.aspx</guid><wfw:comment>http://computer.mblogger.cn/xiaoiiiyao/comments/121675.aspx</wfw:comment><comments>http://computer.mblogger.cn/xiaoiiiyao/posts/121675.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://computer.mblogger.cn/xiaoiiiyao/comments/commentRss/121675.aspx</wfw:commentRss><trackback:ping>http://computer.mblogger.cn/xiaoiiiyao/trackback.aspx?ID=121675</trackback:ping><description>&lt;P&gt;&lt;A href="http://www.cnblogs.com/slh-blogs/archive/2009/05/14/1456517.html"&gt;http://www.cnblogs.com/slh-blogs/archive/2009/05/14/1456517.html&lt;/A&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;最近第一次用C#写了一个windows service ,其实实现的内容比较简单。就是启动remoting 连接，但是调试相对初次写windws service 的我来说，比较烦。没有经验，而且没办法像调试其他windows 程序一样设置断点，无法看到运行过程。经过查看一些相关资料后，有了一点点调试的心得。特此留笔，以待今后使用。&lt;BR&gt;&amp;nbsp;&lt;BR&gt;相关源码：&lt;BR&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;static&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Main()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ServiceBase[]&amp;nbsp;ServicesToRun;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;同一进程中可以运行多个用户服务。若要将&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;另一个服务添加到此进程中，请更改下行以&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;创建另一个服务对象。例如，&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ServicesToRun&amp;nbsp;=&amp;nbsp;new&amp;nbsp;ServiceBase[]&amp;nbsp;{new&amp;nbsp;Service1(),&amp;nbsp;new&amp;nbsp;MySecondUserService()};&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ServicesToRun&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;ServiceBase[]&amp;nbsp;{&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;TeamWorldService()&amp;nbsp;};&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ServiceBase.Run(ServicesToRun);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;TeamWorldService&amp;nbsp;obj&amp;nbsp;=&amp;nbsp;new&amp;nbsp;TeamWorldService();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;obj.OnStart();&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;TeamWorldService :&lt;BR&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;System;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;System.Collections.Generic;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;System.ComponentModel;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;System.Data;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;System.Diagnostics;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;System.ServiceProcess;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;System.Text;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;System.IO;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Tribal.TeamWorld.API;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Tribal.BaseClasses;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Tribal.TeamWorld.Remoting;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;using&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Tribal.TeamWorld.Implementation;&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;namespace&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Tribal.TeamWorld.Service&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;partial&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;TeamWorldService&amp;nbsp;:&amp;nbsp;ServiceBase&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;private&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;RemotingInterface&amp;nbsp;_remotingInterface&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;null&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;private&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;MainController&amp;nbsp;_mainController&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;null&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;TeamWorldService()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;InitializeComponent();&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;protected&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;override&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;OnStart(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;[]&amp;nbsp;args)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.AddTextLine(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Starting&amp;nbsp;server&amp;nbsp;&lt;IMG alt="" src="http://www.cnblogs.com/Images/dot.gif"&gt;&amp;nbsp;(&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;DateTime.Now.ToString()&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;&amp;nbsp;)&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;try&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.AddTextLine(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Initializing&amp;nbsp;MainController&amp;nbsp;&lt;IMG alt="" src="http://www.cnblogs.com/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;._mainController&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;MainController.GetInstance();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;catch&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;(Exception&amp;nbsp;ex)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.PrintExceptions(ex);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;._mainController&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;!=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;null&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.AddTextLine(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Connecting&amp;nbsp;userinterface&amp;nbsp;to&amp;nbsp;LogController&amp;nbsp;&lt;IMG alt="" src="http://www.cnblogs.com/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;try&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.AddTextLine(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Starting&amp;nbsp;MainController&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;._mainController.Start();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;catch&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;(Exception&amp;nbsp;exc)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.PrintExceptions(exc);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;try&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.AddTextLine(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Starting&amp;nbsp;.NET&amp;nbsp;RemotingInterface&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;._remotingInterface&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;RemotingInterface();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;._remotingInterface.StartServing();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;catch&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;(Exception&amp;nbsp;exc)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.PrintExceptions(exc);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;protected&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;override&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;OnStop()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;._remotingInterface.StopServing();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;._mainController.Stop();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.AddTextLine(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;End&amp;nbsp;.NET&amp;nbsp;RemotingInterface&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;private&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;PrintExceptions(Exception&amp;nbsp;exc)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Exception&amp;nbsp;current&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;exc;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;while&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;(current&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;!=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;null&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.AddTextLine(current.Message);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.AddTextLine(current.StackTrace);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;current&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;current.InnerException;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;private&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;AddTextLine(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;line)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;try&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileStream&amp;nbsp;fs&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;FileStream(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;@"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;C:\TeamWorldServiceLog.txt&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&amp;nbsp;FileMode.OpenOrCreate,&amp;nbsp;FileAccess.Write);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StreamWriter&amp;nbsp;m_streamWriter&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;StreamWriter(fs);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_streamWriter.BaseStream.Seek(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&amp;nbsp;SeekOrigin.End);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_streamWriter.WriteLine(line&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;\r\n&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_streamWriter.Flush();&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_streamWriter.Close();&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fs.Close();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;catch&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;(Exception&amp;nbsp;ex)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;方法1：写日志&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;是最传统的调试windows service方法，也是大家在调试service 比较管用的方式，但是，调试起来还是不太明朗。你要在你认为可能出现错误的地方全部添加写日志的方法。我上面的代码就采用了AddTextLine 函数实现的这种方法。&lt;BR&gt;&lt;BR&gt;方法2：附加进程&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 附加进程的方法可以像调试正常的widows程序一样，设置断点进行单步调试。但是，我必须在安装启动服务后，才可以进行附加此服务进程，可在附加的同时OnStart 函数已经执行完毕，所以对Onstart 无法调试。但是我可以通过设置启动服务延时来加载调试。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;步骤如下：&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1，设置启动服务延时，&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;DIV class=cnblogs_code&gt;&lt;SPAN style="COLOR: #0000ff"&gt;private&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;System.Timers.Timer&amp;nbsp;timerDelay;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;protected&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;override&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;OnStart(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;[]&amp;nbsp;args)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;try&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;delay&amp;nbsp;start&amp;nbsp;the&amp;nbsp;SynData&amp;nbsp;30seconds&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timerDelay&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;System.Timers.Timer(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;30000&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timerDelay.Elapsed&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;+=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;System.Timers.ElapsedEventHandler(timerDelay_Elapsed);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timerDelay.Start();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;catch&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;(Exception&amp;nbsp;ex)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.PrintExceptions(ex);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;timerDelay_Elapsed(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;object&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;sender,&amp;nbsp;System.Timers.ElapsedEventArgs&amp;nbsp;e)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timerDelay.Enabled&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;false&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timerDelay.Close();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;你要加的代码&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;.To&amp;nbsp;do&lt;IMG alt="" src="http://www.cnblogs.com/Images/dot.gif"&gt;&lt;IMG alt="" src="http://www.cnblogs.com/Images/dot.gif"&gt;&lt;IMG alt="" src="http://www.cnblogs.com/Images/dot.gif"&gt;&lt;IMG alt="" src="http://www.cnblogs.com/Images/dot.gif"&gt;..&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;注意：&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;正常服务的启动时间为30秒左右，当服务启动时间超过30秒会报错！，所以不要在OnStart中做过多的操作，也可以用这种延时的方法启动服务，以防在启动服务时超时。&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2、首先要对服务进行安装，然后启动服务。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3、打开vs2005&amp;nbsp; 调试&amp;#8212;&amp;gt;附加到进程，选择你的服务进程（如果找不到可以勾选 显示所有用户的进程），就可以了。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;IMG height=454 alt=进程.jpg src="http://images.cnblogs.com/cnblogs_com/peak-weng/进程.jpg" width=698 border=0&gt;&lt;BR&gt;方法3：&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;我认为是这次调试对我帮助最大。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;在Main 函数中,注释掉原有自动生成的代码，注意红字部分是要根据自己的服务名字来手工添加的&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;&lt;FONT color=#008000&gt;ServiceBase[]&amp;nbsp;ServicesToRun;&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT color=#000000&gt;//&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;&lt;FONT color=#008000&gt;同一进程中可以运行多个用户服务。若要将&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT color=#008000&gt;&amp;nbsp;另一个服务添加到此进程中，请更改下行以&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#008000&gt;创建另一个服务对象。例如，&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT color=#000000&gt;//&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#008000&gt;ServicesToRun&amp;nbsp;=&amp;nbsp;new&amp;nbsp;ServiceBase[]&amp;nbsp;{new&amp;nbsp;Service1(),&amp;nbsp;new&amp;nbsp;MySecondUserService()};&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT color=#008000&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&lt;FONT color=#008000&gt;ServicesToRun&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;ServiceBase[]&amp;nbsp;{&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;FONT color=#008000&gt;&lt;FONT color=#008000&gt;&amp;nbsp;TeamWorldService()&amp;nbsp;};&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&lt;FONT color=#008000&gt;ServiceBase.Run(ServicesToRun);&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&lt;FONT color=#008000&gt;******************************************&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style="COLOR: red"&gt;TeamWorldService&amp;nbsp;obj&amp;nbsp;=&amp;nbsp;new&amp;nbsp;TeamWorldService();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;obj.OnStart();&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//******************************************&lt;BR&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;然后把 &lt;SPAN style="COLOR: #0000ff"&gt;protected&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;override&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;OnStart(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;[]&amp;nbsp;args) 改为 &lt;SPAN style="COLOR: #0000ff"&gt;public &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;OnStart(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;)。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ，设置你的断点，按 F5 运行就可以调试了。&lt;BR&gt;&lt;BR&gt;以上是自己这次调试widows service 后，得到的一些方法。以待今后继续积累。&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;</description></item><item><dc:creator>xiaoiiiyao</dc:creator><title>[zz]提示文字根据焦点自动消失的输入框javascript </title><link>http://computer.mblogger.cn/xiaoiiiyao/posts/121626.aspx</link><pubDate>Fri, 26 Jun 2009 13:38:00 GMT</pubDate><guid>http://computer.mblogger.cn/xiaoiiiyao/posts/121626.aspx</guid><wfw:comment>http://computer.mblogger.cn/xiaoiiiyao/comments/121626.aspx</wfw:comment><comments>http://computer.mblogger.cn/xiaoiiiyao/posts/121626.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://computer.mblogger.cn/xiaoiiiyao/comments/commentRss/121626.aspx</wfw:commentRss><trackback:ping>http://computer.mblogger.cn/xiaoiiiyao/trackback.aspx?ID=121626</trackback:ping><description>&lt;P&gt;&lt;A href="http://www.cnblogs.com/zfanswer/archive/2009/04/23/1441938.html"&gt;http://www.cnblogs.com/zfanswer/archive/2009/04/23/1441938.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;输入框html代码&lt;/P&gt;&lt;PRE class=code&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;input &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;id&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="searchKey" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="text" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;name&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="q" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;tips&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="请输入关键字"&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;br &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;FONT face=Verdana&gt;/&amp;gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;js脚本语言,完成功能:&lt;BR&gt;a.页面加载完毕输入框中显示提示文字,可在上边的输入框属性tips中自定义&lt;BR&gt;b.鼠标点击输入框,输入框获得焦点时,提示文字自动消失&lt;BR&gt;c.鼠标焦点离开输入框,提示文字根据情况显示&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 网上好多实例代码是鼠标一离开就显示提示文字,输入框中用户的输入也会消失-----不合理&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 有的保存了用户输入,离开时还是会显示提示文字,再获得焦点是显示用户的输入,也不太符合习惯&lt;BR&gt;&amp;nbsp;&amp;nbsp; 经本人修改:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 判断输入框中如果有用户输入,则焦点离开时输入不会被提示文字取代,并且再次获得焦点时,光标自动位于文字的最后方,这也是经常使用的一个小技巧,提高用户体验.&lt;BR&gt;d.这样就可以和一个button完美组合成一个输入框了,检索服务等等...&lt;/P&gt;&lt;PRE class=code&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;script &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;language&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="javascript" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;type&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;FONT face=Verdana&gt;="text/javascript"&amp;gt;
&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: green"&gt;//输入框内水印
&lt;/SPAN&gt;window.onload = &lt;SPAN style="COLOR: blue"&gt;function&lt;/SPAN&gt;(){
    &lt;SPAN style="COLOR: blue"&gt;var &lt;/SPAN&gt;o=document.getElementById(&lt;SPAN style="COLOR: maroon"&gt;"searchKey"&lt;/SPAN&gt;);
    o.setAttribute(&lt;SPAN style="COLOR: maroon"&gt;"valueCache"&lt;/SPAN&gt;,o.value);
    o.onblur = &lt;SPAN style="COLOR: blue"&gt;function&lt;/SPAN&gt;(){
        &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;(o.value==&lt;SPAN style="COLOR: maroon"&gt;""&lt;/SPAN&gt;)
        {
            o.valueCache=&lt;SPAN style="COLOR: maroon"&gt;""&lt;/SPAN&gt;;
            o.value=o.tips;
        }
        &lt;/FONT&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: blue"&gt;else
            &lt;/SPAN&gt;o.valueCache=o.value;
    }
    o.onfocus = &lt;SPAN style="COLOR: blue"&gt;function&lt;/SPAN&gt;(){
        o.value=o.valueCache; 
        &lt;/FONT&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: green"&gt;//光标始终在文字最后
      &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;var &lt;/SPAN&gt;e = &lt;SPAN style="COLOR: blue"&gt;event&lt;/SPAN&gt;.srcElement;
        &lt;SPAN style="COLOR: blue"&gt;var &lt;/SPAN&gt;r =e.createTextRange();
        r.moveStart(&lt;SPAN style="COLOR: maroon"&gt;'character'&lt;/SPAN&gt;,e.value.length);
        r.collapse(&lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;);
        r.select();
    }
    o.onblur();
}&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE class=code&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;script&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/PRE&gt;</description></item><item><dc:creator>xiaoiiiyao</dc:creator><title>[zz]未能加载文件或程序集“Microsoft.Office.Interop.Excel"</title><link>http://computer.mblogger.cn/xiaoiiiyao/posts/121588.aspx</link><pubDate>Wed, 24 Jun 2009 19:21:00 GMT</pubDate><guid>http://computer.mblogger.cn/xiaoiiiyao/posts/121588.aspx</guid><wfw:comment>http://computer.mblogger.cn/xiaoiiiyao/comments/121588.aspx</wfw:comment><comments>http://computer.mblogger.cn/xiaoiiiyao/posts/121588.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://computer.mblogger.cn/xiaoiiiyao/comments/commentRss/121588.aspx</wfw:commentRss><trackback:ping>http://computer.mblogger.cn/xiaoiiiyao/trackback.aspx?ID=121588</trackback:ping><description>&lt;P&gt;未能加载文件或程序集&amp;#8220;Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&amp;#8221;或它的某一个依赖项。系统找不到指定的文件。&lt;/P&gt;
&lt;P&gt;部署时遇到了这个问题。&lt;/P&gt;
&lt;P&gt;目前已经解决。&lt;/P&gt;
&lt;P&gt;服务器上没有安装Office&lt;/P&gt;
&lt;P&gt;提出以后，管理员安装了Office2003（注意安装以后要重启电脑）&lt;/P&gt;
&lt;P&gt;按照网上找到的一些方法，&lt;/P&gt;
&lt;P&gt;安装：&lt;BR&gt;vstor.exe&lt;BR&gt;&lt;BR&gt;下载地址：&lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=8315654B-A5AE-4108-B7FC-186402563F2B&amp;amp;displaylang=zh-cn#filelist" target=_blank&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=8315654B-A5AE-4108-B7FC-186402563F2B&amp;amp;displaylang=zh-cn#filelist&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;然后下载安装：&lt;BR&gt;O2003PIA.EXE&lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=3C9A983A-AC14-4125-8BA0-D36D67E0F4AD&amp;amp;displaylang=en" target=_blank&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=3C9A983A-AC14-4125-8BA0-D36D67E0F4AD&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;之后还是没有解决&lt;/P&gt;
&lt;P&gt;然后&lt;/P&gt;
&lt;P&gt;在服务器上 开始-程序-管理工具-Microsoft .NET Framework 2.0 配置-管理程序集缓存-将程序集添加到程序集缓存。选中那些dll即可。&lt;/P&gt;
&lt;P&gt;然而不幸的是还是没有解决。&lt;/P&gt;
&lt;P&gt;最后重启IIS 问题解决了。&lt;/P&gt;
&lt;P&gt;具体怎么解决的就是以上两个方法之一或两者都必须做到。&lt;/P&gt;
&lt;P&gt;我认为一个很重要的问题是&lt;/P&gt;
&lt;P&gt;在C:\WINDOWS\assembly目录下面必须要有项目的引用。&lt;/P&gt;
&lt;P&gt;未能加载文件或程序集&amp;#8220;Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&amp;#8221;或它的某一个依赖项。系统找不到指定的文件。&lt;/P&gt;
&lt;P&gt;其中的原理是&lt;/P&gt;
&lt;P&gt;计算机上缺少了项目引用的Office类文件Interop.Excel.dll&lt;/P&gt;
&lt;P&gt;vstor.exe和O2003PIA.EXE是office可重用开发XXX的安装程序。&lt;/P&gt;
&lt;P&gt;写的不太清楚，反正就是这样子了&lt;/P&gt;</description></item><item><dc:creator>xiaoiiiyao</dc:creator><title>[zz]定义局部变量时，字符串不能超过8000的方法 </title><link>http://computer.mblogger.cn/xiaoiiiyao/posts/121567.aspx</link><pubDate>Wed, 24 Jun 2009 14:04:00 GMT</pubDate><guid>http://computer.mblogger.cn/xiaoiiiyao/posts/121567.aspx</guid><wfw:comment>http://computer.mblogger.cn/xiaoiiiyao/comments/121567.aspx</wfw:comment><comments>http://computer.mblogger.cn/xiaoiiiyao/posts/121567.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://computer.mblogger.cn/xiaoiiiyao/comments/commentRss/121567.aspx</wfw:commentRss><trackback:ping>http://computer.mblogger.cn/xiaoiiiyao/trackback.aspx?ID=121567</trackback:ping><description>&lt;H2&gt;&lt;FONT style="BACKGROUND-COLOR: #00ff00" size=2&gt;&lt;A href="http://www.cnblogs.com/xnxylf/archive/2008/11/14/1333211.html"&gt;http://www.cnblogs.com/xnxylf/archive/2008/11/14/1333211.html&lt;/A&gt;&lt;/FONT&gt;&lt;/H2&gt;
&lt;H2&gt;&lt;FONT style="BACKGROUND-COLOR: #00ff00" size=2&gt;经常有人提到,用动态生成SQL语句的方法处理数据时,处理语句超长,无法处理的问题&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/H2&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT style="BACKGROUND-COLOR: #ccffcc"&gt;/*-- 数据测试环境 --*/&lt;/FONT&gt;&lt;BR&gt;if exists (select * from dbo.sysobjects where id = object_id(N'[tb]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)&lt;BR&gt;drop table [tb]&lt;BR&gt;GO&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;create table tb(单位名称 varchar(10),日期 datetime,销售额 int)&lt;BR&gt;insert into tb&lt;BR&gt;&amp;nbsp;select 'A单位','2001-01-01',100&lt;BR&gt;&amp;nbsp;union all select 'B单位','2001-01-02',101&lt;BR&gt;&amp;nbsp;union all select 'C单位','2001-01-03',102&lt;BR&gt;&amp;nbsp;union all select 'D单位','2001-01-04',103&lt;BR&gt;&amp;nbsp;union all select 'E单位','2001-01-05',104&lt;BR&gt;&amp;nbsp;union all select 'F单位','2001-01-06',105&lt;BR&gt;&amp;nbsp;union all select 'G单位','2001-01-07',106&lt;BR&gt;&amp;nbsp;union all select 'H单位','2001-01-08',107&lt;BR&gt;&amp;nbsp;union all select 'I单位','2001-01-09',108&lt;BR&gt;&amp;nbsp;union all select 'J单位','2001-01-11',109&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #00ffff" size=2&gt;/*-- 要求结果&lt;BR&gt;日期&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A单位&amp;nbsp; B单位 C单位 D单位 E单位&amp;nbsp; F单位 G单位 H单位 I单位 J单位&amp;nbsp;&amp;nbsp; &lt;BR&gt;---------- ----- ----- ----- ----- ----- ----- ----&amp;nbsp; ----&amp;nbsp; ---- ------&lt;BR&gt;2001-01-01 100&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR&gt;2001-01-02 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 101&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR&gt;2001-01-03 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 102&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR&gt;2001-01-04 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 103&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR&gt;2001-01-05 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 104&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR&gt;2001-01-06 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 105&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR&gt;2001-01-07 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 106&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR&gt;2001-01-08 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 107&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR&gt;2001-01-09 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 108&amp;nbsp;&amp;nbsp; 0&lt;BR&gt;2001-01-11 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 109&lt;BR&gt;--*/&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #99ccff" size=2&gt;/*-- 常规处理方法*/ &lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;SPAN style="COLOR: #0000ff"&gt;declare&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;@sql&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold; COLOR: #000000"&gt;varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold; COLOR: #800000"&gt;8000&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #000000"&gt;)&lt;BR&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;set&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;@sql&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;select&amp;nbsp;日期=convert(varchar(10),日期,120)&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #0000ff"&gt;select&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;@sql&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;@sql&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;,[&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;+&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #000000"&gt;单位名称&lt;BR&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;]=sum(case&amp;nbsp;单位名称&amp;nbsp;when&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'''&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;单位名称&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'''&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;&amp;nbsp;then&amp;nbsp;销售额&amp;nbsp;else&amp;nbsp;0&amp;nbsp;end)&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #0000ff"&gt;from&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;select&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;distinct&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;单位名称&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;from&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;tb)&amp;nbsp;a&lt;BR&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;exec&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;@sql&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;&amp;nbsp;from&amp;nbsp;tb&amp;nbsp;group&amp;nbsp;by&amp;nbsp;convert(varchar(10),日期,120)&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;)&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #00ff00" size=2&gt;/*-- 问题: 如果单位很多,这时,@SQL的值就会被截断,从而出错.*/&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #00ff00" size=2&gt;/*--下面给出种解决办法:--*/&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #00ccff" size=2&gt;--/*-- 方法1. 多个变量处理&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;SPAN style="COLOR: #008080"&gt;--&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;定义变量,估计需要多少个变量才能保存完所有数据&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008080"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #0000ff"&gt;declare&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;@sql0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold; COLOR: #000000"&gt;varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold; COLOR: #800000"&gt;8000&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;),&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;@sql1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold; COLOR: #000000"&gt;varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold; COLOR: #800000"&gt;8000&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #000000"&gt;)&lt;BR&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;--&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;,&lt;IMG src="http://www.cnblogs.com/Images/dot.gif"&gt;@sqln&amp;nbsp;varchar(8000)&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008080"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #008080"&gt;--&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;生成数据处理临时表&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008080"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #0000ff"&gt;select&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;id&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff00ff"&gt;identity&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold; COLOR: #000000"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold; COLOR: #800000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold; COLOR: #800000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;),groupid&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold; COLOR: #800000"&gt;0&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&amp;nbsp;,值&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #808080"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;,[&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;单位名称&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;]=sum(case&amp;nbsp;单位名称&amp;nbsp;when&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'''&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #808080"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;单位名称&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'''&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;&amp;nbsp;then&amp;nbsp;销售额&amp;nbsp;else&amp;nbsp;0&amp;nbsp;end)&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #0000ff"&gt;into&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;temp&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;from&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;select&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;distinct&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;单位名称&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;from&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;tb)&amp;nbsp;a&lt;BR&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;--&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;分组临时表,判断慨最多多少个单位可以组合成一个不超过8000的字符串,这里取假设为5个&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008080"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #0000ff"&gt;update&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;temp&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;set&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;groupid&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;id&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold; COLOR: #800000"&gt;5&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;--&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;5为每组的单位个数&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008080"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #008080"&gt;--&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;生成SQL语句处理字符串&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008080"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;--&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;初始化&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008080"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #0000ff"&gt;select&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;@sql0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;''&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&amp;nbsp;,&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #008000"&gt;@sql1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;''&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #008080"&gt;--&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;&lt;IMG src="http://www.cnblogs.com/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008080"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;--&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&lt;FONT size=2&gt;&amp;nbsp;,@sqln&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #008080"&gt;--&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;得到处理字符串&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008080"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #0000ff"&gt;select&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;@sql0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;@sql0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;值&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;from&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;temp&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;where&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;groupid&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold; COLOR: #800000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;--&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;第一个变量&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008080"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #0000ff"&gt;select&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;@sql1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;@sql1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;值&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;from&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;temp&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;where&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;groupid&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold; COLOR: #800000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;--&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;第二个变量&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008080"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;--&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&lt;FONT size=2&gt;select&amp;nbsp;@sqln=@sqln+值&amp;nbsp;from&amp;nbsp;#temp&amp;nbsp;where&amp;nbsp;groupid=n&amp;nbsp;&amp;nbsp;--第n个变量&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #008080"&gt;--&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;查询&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008080"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #0000ff"&gt;exec&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;select&amp;nbsp;日期=convert(varchar(10),日期,120)&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #808080"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;@sql0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;@sql1&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #008080"&gt;--&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;&lt;IMG src="http://www.cnblogs.com/Images/dot.gif"&gt;+@sqln&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008080"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #ff0000"&gt;&amp;nbsp;from&amp;nbsp;tb&amp;nbsp;group&amp;nbsp;by&amp;nbsp;convert(varchar(10),日期,120)&lt;BR&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;'&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #000000"&gt;)&lt;BR&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;--&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;删除临时表&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008080"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="COLOR: #0000ff"&gt;drop&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;table&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;temp&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #00ff00"&gt;&lt;FONT size=2&gt;/*&lt;BR&gt;优点:比较灵活,数据量大时只需要增加变量就行了.不用改动其他部分&lt;BR&gt;缺点:要自行估计处理的数据,估计不足就会出错&lt;BR&gt;*/&lt;BR&gt;--*/&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #ccffcc" size=2&gt;--/*-- 方法2. 多个变量处理,综合了方法1, 解决了方法1中需要人为判断的问题,自动根据要处理的数据量进行变量定义&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;declare @sqlhead varchar(8000),@sqlend varchar(8000)&lt;BR&gt;&amp;nbsp;,@sql1 varchar(8000),@sql2 varchar(8000),@sql3 varchar(8000),@sql4 varchar(8000)&lt;BR&gt;&amp;nbsp;,@i int,@ic varchar(20)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;--生成数据处理临时表&lt;BR&gt;select id=identity(int,0,1),gid=0&lt;BR&gt;&amp;nbsp;,a=',['+单位名称&amp;nbsp;+']=sum(case 单位名称 when '''&lt;BR&gt;&amp;nbsp;+单位名称+''' then 销售额 else 0 end)'&lt;BR&gt;into # from(select distinct 单位名称 from tb) a&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;--判断需要多少个变量来处理&lt;BR&gt;select @i=max(len(a)) from #&lt;BR&gt;print @i&lt;BR&gt;set @i=7800/@i&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;--分组临时表&lt;BR&gt;update # set &lt;/FONT&gt;&lt;A href="mailto:gid=id/@i"&gt;&lt;FONT size=2&gt;gid=id/@i&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;FONT size=2&gt;select @i=max(gid) from #&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;--生成数据处理语句&lt;BR&gt;select @sqlhead='''select 日期=convert(varchar(10),日期,120)'''&lt;BR&gt;&amp;nbsp;,@sqlend=''' from tb group by convert(varchar(10),日期,120)'''&lt;BR&gt;&amp;nbsp;,@sql1='',@sql2='select ',@sql3='',@sql4=''&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;while @i&amp;gt;=0&lt;BR&gt;&amp;nbsp;select @ic=cast(@i as varchar),@i=@i-1&lt;BR&gt;&amp;nbsp;&amp;nbsp;,@sql1='@'+@ic+' varchar(8000),'+@sql1&lt;BR&gt;&amp;nbsp;&amp;nbsp;,@sql2=@sql2+'@'+@ic+'='''','&lt;BR&gt;&amp;nbsp;&amp;nbsp;,@sql3='select @'+@ic+'=@'+@ic+'+a from # where &lt;/FONT&gt;&lt;A href="mailto:gid='+@ic"&gt;&lt;FONT size=2&gt;gid='+@ic&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;+char(13)+@sql3&lt;BR&gt;&amp;nbsp;&amp;nbsp;,@sql4=@sql4+',@'+@ic&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;select @sql1='declare '+left(@sql1,len(@sql1)-1)+char(13)&lt;BR&gt;&amp;nbsp;,@sql2=left(@sql2,len(@sql2)-1)+char(13)&lt;BR&gt;&amp;nbsp;,@sql3=left(@sql3,len(@sql3)-1)&lt;BR&gt;&amp;nbsp;,@sql4=substring(@sql4,2,8000)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;--执行&lt;BR&gt;exec( @sql1+@sql2+@sql3+'&lt;BR&gt;exec(&lt;/FONT&gt;&lt;A href="mailto:'+@sqlhead+'+'+@sql4+'+'+@sqlend+')'"&gt;&lt;FONT size=2&gt;'+@sqlhead+'+'+@sql4+'+'+@sqlend+')'&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;FONT size=2&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;--删除临时表&lt;BR&gt;drop table #&lt;BR&gt;--*/&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #ccffcc" size=2&gt;方法2中,关键要做修改的是下面两句,其他基本上不用做改变:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #ccffcc" size=2&gt;--生成数据处理临时表,修改a=后面的内容为相应的处理语句&lt;BR&gt;select id=identity(int,0,1),gid=0&lt;BR&gt;&amp;nbsp;,a=',['+code+']=sum(case b.c_code when '''&lt;BR&gt;&amp;nbsp;+code+''' then b.value else 0 end)'&lt;BR&gt;into # from #Class&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT style="BACKGROUND-COLOR: #ccffcc"&gt;--生成数据处理语句,将@sqlhead,@sqlend赋值为相应的处理语句头和尾&lt;BR&gt;select @sqlhead='''select a.id,a.name,a.code'''&lt;BR&gt;&amp;nbsp;,@sqlend=''' from #Depart a,#Value b where a.Code=b.d_Code group by a.id,a.code,a.name'''&lt;BR&gt;&amp;nbsp;,@sql1='',@sql2='select ',@sql3='',@sql4=''&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;</description></item><item><dc:creator>xiaoiiiyao</dc:creator><title>[zz]检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败，原因是出现以下错误: 80070005。</title><link>http://computer.mblogger.cn/xiaoiiiyao/posts/121542.aspx</link><pubDate>Tue, 23 Jun 2009 15:51:00 GMT</pubDate><guid>http://computer.mblogger.cn/xiaoiiiyao/posts/121542.aspx</guid><wfw:comment>http://computer.mblogger.cn/xiaoiiiyao/comments/121542.aspx</wfw:comment><comments>http://computer.mblogger.cn/xiaoiiiyao/posts/121542.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://computer.mblogger.cn/xiaoiiiyao/comments/commentRss/121542.aspx</wfw:commentRss><trackback:ping>http://computer.mblogger.cn/xiaoiiiyao/trackback.aspx?ID=121542</trackback:ping><description>&lt;P&gt;&lt;A href="http://topic.csdn.net/u/20070628/16/17b8b13e-8728-4403-bf14-9e814fd9142f.html"&gt;http://topic.csdn.net/u/20070628/16/17b8b13e-8728-4403-bf14-9e814fd9142f.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;配置DCOM &lt;BR&gt;&lt;BR&gt;具体配置方法如下: &lt;BR&gt;&lt;BR&gt;1:在服务器上安装office的Excel软件. &lt;BR&gt;&lt;BR&gt;2:在"开始"-&amp;gt;"运行"中输入dcomcnfg.exe启动"组件服务" &lt;BR&gt;&lt;BR&gt;3:依次双击"组件服务"-&amp;gt;"计算机"-&amp;gt;"我的电脑"-&amp;gt;"DCOM配置" &lt;BR&gt;&lt;BR&gt;4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应用程序属性"对话框 &lt;BR&gt;&lt;BR&gt;5:点击"标识"标签,选择"交互式用户" &lt;BR&gt;&lt;BR&gt;6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限. &lt;BR&gt;&lt;BR&gt;7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限. &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: #ff0000"&gt;注：在XP系统中还要添"加机器名/ASPNET"用户的上述权限。 &lt;BR&gt;在window 2003 server中，如果还出现8000401a错误，在标示里面选择&amp;#8220;下列用户&amp;#8221;，填写登录计算机的并拥有对Excel本地操作权限的用户。或者在标示里面选择&amp;#8220;启用用户&amp;#8221;&lt;/SPAN&gt; &lt;BR&gt;&lt;/P&gt;</description></item><item><dc:creator>xiaoiiiyao</dc:creator><title>[Data Structure]二叉搜索树的节点删除（Binary Search Trees）(zz)</title><link>http://computer.mblogger.cn/xiaoiiiyao/posts/107665.aspx</link><pubDate>Mon, 22 Dec 2008 18:31:00 GMT</pubDate><guid>http://computer.mblogger.cn/xiaoiiiyao/posts/107665.aspx</guid><wfw:comment>http://computer.mblogger.cn/xiaoiiiyao/comments/107665.aspx</wfw:comment><comments>http://computer.mblogger.cn/xiaoiiiyao/posts/107665.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://computer.mblogger.cn/xiaoiiiyao/comments/commentRss/107665.aspx</wfw:commentRss><trackback:ping>http://computer.mblogger.cn/xiaoiiiyao/trackback.aspx?ID=107665</trackback:ping><description>&lt;DIV class=tit&gt;转自：&lt;A href="http://hi.baidu.com/sangwf/blog/item/e9b4211f26c2e3c8a6866967.html"&gt;http://hi.baidu.com/sangwf/blog/item/e9b4211f26c2e3c8a6866967.html&lt;/A&gt;&lt;/DIV&gt;
&lt;TABLE style="TABLE-LAYOUT: fixed"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;DIV class=cnt id=blog_text&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 上次在《线性搜索的优化》中提到一个程序中的二叉树节点删除出现了BUG，一直没有去解决，虽然没有什么大碍，但心里中觉得有点不爽，还是要解决掉。于是翻了一下数据结构课本，把关于二叉搜索树的东西又看了一遍，自己也写了个删除节点的函数，测试了几下没有出现问题，估计没BUG了吧。今天就想总结一下。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 首先，我们要明确二叉搜索树的概念。其定义是：它是一个二叉树，可能为空。如果不为空，则满足以下属性：&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1）每个元素都有一个键值，并且没有重复。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2）左子树中的元素键值都小于根节点的键值。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3）右子树中的元素键值都大于根节点的键值。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4）左右子树也满足二叉搜索树的定义。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;通过这个定义我们就明白了什么是二叉搜索树。对它的搜索和插入都比较容易，搜索就是二分搜索法，插入就是首先搜索树，将搜索中止的节点作为父节点，把待插入的节点作为它的儿子，也比较容易理解。最麻烦的就是删除节点，因为情况比较多，需要所有情况都考虑清楚。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在我看来，写一个小程序和写一个大软件没多大区别，都要按照软件工程的步骤来做。可行性分析和需求分析就不说了，首先要对这个删除功能进行设计，那就要把所有情况都列举出来。我是不赞同一边写代码一边考虑情况的，那样容易遗漏情况。那我们就来分析一下所存在的情况。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 待删除的节点按照儿子的个数可以分为三种：&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1）没有儿子，即为叶节点。直接把父节点的对应儿子指针设为NULL，删除儿子节点就OK了。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2）只有一个儿子。那么把父节点的相应儿子指针指向儿子的独生子，删除儿子节点也OK了。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3）有两个儿子。这是最麻烦的情况，因为你删除节点之后，还要保证满足搜索二叉树的结构。其实也比较容易，我们可以选择左儿子中的最大元素或者右儿子中的最小元素放到待删除节点的位置，就可以保证结构的不变。当然，你要记得调整子树，毕竟又出现了节点删除。习惯上大家选择左儿子中的最大元素，其实选择右儿子的最小元素也一样，没有任何差别，只是人们习惯从左向右。这里咱们也选择左儿子的最大元素，将它放到待删节点的位置。左儿子的最大元素其实很好找，只要顺着左儿子不断的去搜索右子树就可以了，直到找到一个没有右子树的节点。那就是最大的了（很好证明）。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;初略的一看，你可能觉得要递归了，删除了左子树的最大元素不是还要调整吗？其实你可以看到，这个元素是没有右子树的（左子树有没有无所谓），我们只要将最大元素的父节点指向最大元素的左儿子就可以了。最后，清理掉待删除的儿子节点。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 还有其他情况么？没有了。但要注意一点问题，那就是待删除的节点可能没有父亲，也就是可能本身就是根节点。那就要改变根节点指针了。这样在编程时，是首先按照有无父节点分成两种情况呢？还是按照儿子个数分为三种情况然后在处理没有父亲的特殊情况呢？我个人选择第二种，代码量会小一点（两个儿子的情况处理代码较多）。代码如下：&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void delete_node(tree_node_ptr * pptr,int value) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tree_node_ptr tree = *pptr;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tree_node_ptr parent = NULL, child = NULL;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while (tree) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (value == tree-&amp;gt;value) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;child = tree;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (value &amp;lt; tree-&amp;gt;value) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parent = tree;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tree = tree-&amp;gt;left;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parent = tree;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tree = tree-&amp;gt;right;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!child) { //未找到&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return ;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;&amp;nbsp;//叶节点&lt;BR&gt;&amp;nbsp;if (child-&amp;gt;left==NULL&amp;amp;&amp;amp;child-&amp;gt;right == NULL) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;if (parent == NULL) { //根节点&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*pptr = NULL;&lt;BR&gt;&amp;nbsp;&amp;nbsp;} else if (parent-&amp;gt;left == child) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;parent-&amp;gt;left = NULL;&lt;BR&gt;&amp;nbsp;&amp;nbsp;} else {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;parent-&amp;gt;right = NULL;&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;&amp;nbsp;} else&lt;/P&gt;
&lt;P&gt;&amp;nbsp;//只有一个孩子&lt;BR&gt;&amp;nbsp;if (!(child-&amp;gt;left&amp;amp;&amp;amp;child-&amp;gt;right)) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;if (child-&amp;gt;left) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (parent == NULL) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*pptr = child-&amp;gt;left;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parent = child-&amp;gt;left;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;} else {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (parent == NULL) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*pptr = child-&amp;gt;right;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parent = child-&amp;gt;right;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;} else &lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;//有两个孩子&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;//寻找左子树的最大元素&lt;BR&gt;&amp;nbsp;&amp;nbsp;tree_node_ptr pMax = child-&amp;gt;left;&lt;BR&gt;&amp;nbsp;&amp;nbsp;tree_node_ptr pMaxParent = NULL;&lt;BR&gt;&amp;nbsp;&amp;nbsp;while (pMax-&amp;gt;right) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;pMaxParent = pMax;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;pMax = pMax-&amp;gt;right;&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;if (pMax == child-&amp;gt;left) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;pMax-&amp;gt;right = child-&amp;gt;right;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;} else {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;pMaxParent-&amp;gt;right = pMax-&amp;gt;left;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;pMax-&amp;gt;left = child-&amp;gt;left;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;pMax-&amp;gt;right = child-&amp;gt;right;&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;if (parent == NULL) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*pptr = pMax;&lt;BR&gt;&amp;nbsp;&amp;nbsp;} else if(parent-&amp;gt;left == child) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;parent-&amp;gt;left = pMax;&lt;BR&gt;&amp;nbsp;&amp;nbsp;} else {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;parent-&amp;gt;right = pMax;&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;delete child;&lt;BR&gt;}&lt;/P&gt;&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description></item><item><dc:creator>xiaoiiiyao</dc:creator><title>也谈内存对齐（zz）</title><link>http://computer.mblogger.cn/xiaoiiiyao/posts/93036.aspx</link><pubDate>Wed, 12 Nov 2008 10:00:00 GMT</pubDate><guid>http://computer.mblogger.cn/xiaoiiiyao/posts/93036.aspx</guid><wfw:comment>http://computer.mblogger.cn/xiaoiiiyao/comments/93036.aspx</wfw:comment><comments>http://computer.mblogger.cn/xiaoiiiyao/posts/93036.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://computer.mblogger.cn/xiaoiiiyao/comments/commentRss/93036.aspx</wfw:commentRss><trackback:ping>http://computer.mblogger.cn/xiaoiiiyao/trackback.aspx?ID=93036</trackback:ping><description>&lt;H2&gt;也谈内存对齐&lt;SPAN class=category&gt; - [&lt;A href="http://bigwhite.blogbus.com/c1381792/"&gt;&lt;FONT color=#4a664d&gt;技术前沿&lt;/FONT&gt;&lt;/A&gt;]&lt;/SPAN&gt;&lt;/H2&gt;
&lt;DIV class=tags&gt;Tag：&lt;A href="http://bigwhite.blogbus.com/tag/语言探索/"&gt;&lt;FONT color=#4a664d&gt;语言探索&lt;/FONT&gt;&lt;/A&gt; &lt;/DIV&gt;
&lt;DIV class=postBody&gt;
&lt;P class=cc-lisence style="LINE-HEIGHT: 180%"&gt;&lt;A href="http://creativecommons.org/licenses/by/3.0/deed.zh" target=_blank&gt;&lt;FONT color=#4a664d&gt;版权声明&lt;/FONT&gt;&lt;/A&gt;：转载时请以超链接形式标明文章原始出处和作者信息及&lt;A href="http://bangzhuzhongxin.blogbus.com/logs/11205960.html" target=_blank&gt;&lt;FONT color=#4a664d&gt;本声明&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;A href="http://bigwhite.blogbus.com/logs/1347304.html"&gt;&lt;FONT color=#4a664d&gt;http://bigwhite.blogbus.com/logs/1347304.html&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;在最近的项目中，我们涉及到了&amp;#8220;内存对齐&amp;#8221;技术。对于大部分程序员来说，&amp;#8220;内存对齐&amp;#8221;对他们来说都应该是&amp;#8220;透明的&amp;#8221;。&amp;#8220;内存对齐&amp;#8221;应该是编译器的&amp;#8220;管辖范围&amp;#8221;。编译器为程序中的每个&amp;#8220;数据单元&amp;#8221;安排在适当的位置上。但是C语言的一个特点就是太灵活，太强大，它允许你干预&amp;#8220;内存对齐&amp;#8221;。如果你想了解更加底层的秘密，&amp;#8220;内存对齐&amp;#8221;对你就不应该再透明了。&lt;/P&gt;
&lt;P&gt;一、内存对齐的原因&lt;BR&gt;大部分的参考资料都是如是说的：&lt;BR&gt;1、平台原因(移植原因)：不是所有的硬件平台都能访问任意地址上的任意数据的；某些硬件平台只能在某些地址处取某些特定类型的数据，否则抛出硬件异常。&lt;BR&gt;2、性能原因：数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于，为了访问未对齐的内存，处理器需要作两次内存访问；而对齐的内存访问仅需要一次访问。&lt;/P&gt;
&lt;P&gt;二、对齐规则&lt;BR&gt;每个特定平台上的编译器都有自己的默认&amp;#8220;对齐系数&amp;#8221;(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n)，n=1,2,4,8,16来改变这一系数，其中的n就是你要指定的&amp;#8220;对齐系数&amp;#8221;。&lt;/P&gt;
&lt;P&gt;规则：&lt;BR&gt;1、数据成员对齐规则：结构(struct)(或联合(union))的数据成员，第一个数据成员放在offset为0的地方，以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中，比较小的那个进行。&lt;BR&gt;2、结构(或联合)的整体对齐规则：在数据成员完成各自对齐之后，结构(或联合)本身也要进行对齐，对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中，比较小的那个进行。&lt;BR&gt;3、结合1、2颗推断：当#pragma pack的n值等于或超过所有数据成员长度的时候，这个n值的大小将不产生任何效果。&lt;/P&gt;
&lt;P&gt;三、试验&lt;BR&gt;我们通过一系列例子的详细说明来证明这个规则吧!&lt;BR&gt;我试验用的编译器包括GCC 3.4.2和VC6.0的C编译器，平台为Windows XP + Sp2。&lt;/P&gt;
&lt;P&gt;我们将用典型的struct对齐来说明。首先我们定义一个struct：&lt;BR&gt;#pragma pack(n) /* n = 1, 2, 4, 8, 16 */&lt;BR&gt;struct test_t {&lt;BR&gt;&amp;nbsp;int a;&lt;BR&gt;&amp;nbsp;char b;&lt;BR&gt;&amp;nbsp;short c;&lt;BR&gt;&amp;nbsp;char d;&lt;BR&gt;};&lt;BR&gt;#pragma pack(n)&lt;BR&gt;首先我们首先确认在试验平台上的各个类型的size，经验证两个编译器的输出均为：&lt;BR&gt;sizeof(char) = 1&lt;BR&gt;sizeof(short) = 2&lt;BR&gt;sizeof(int) = 4&lt;/P&gt;
&lt;P&gt;我们的试验过程如下：通过#pragma pack(n)改变&amp;#8220;对齐系数&amp;#8221;，然后察看sizeof(struct test_t)的值。&lt;/P&gt;
&lt;P&gt;1、1字节对齐(#pragma pack(1))&lt;BR&gt;输出结果：sizeof(struct test_t) = 8 [两个编译器输出一致]&lt;BR&gt;分析过程：&lt;BR&gt;1) 成员数据对齐&lt;BR&gt;#pragma pack(1)&lt;BR&gt;struct test_t {&lt;BR&gt;&amp;nbsp;int a;&amp;nbsp;&amp;nbsp;/* 长度4 &amp;lt; 1 按1对齐；起始offset=0 0%1=0；存放位置区间[0,3] */&lt;BR&gt;&amp;nbsp;char b;&amp;nbsp;&amp;nbsp;/* 长度1 = 1 按1对齐；起始offset=4 4%1=0；存放位置区间[4] */&lt;BR&gt;&amp;nbsp;short c;&amp;nbsp;/* 长度2 &amp;gt; 1 按1对齐；起始offset=5 5%1=0；存放位置区间[5,6] */&lt;BR&gt;&amp;nbsp;char d;&amp;nbsp;&amp;nbsp;/* 长度1 = 1 按1对齐；起始offset=7 7%1=0；存放位置区间[7] */&lt;BR&gt;};&lt;BR&gt;#pragma pack()&lt;BR&gt;成员总大小=8&lt;/P&gt;
&lt;P&gt;2) 整体对齐&lt;BR&gt;整体对齐系数 = min((max(int,short,char), 1) = 1&lt;BR&gt;整体大小(size)=$(成员总大小) 按 $(整体对齐系数) 圆整 = 8 /* 8%1=0 */ [注1]&lt;/P&gt;
&lt;P&gt;2、2字节对齐(#pragma pack(2))&lt;BR&gt;输出结果：sizeof(struct test_t) = 10 [两个编译器输出一致]&lt;BR&gt;分析过程：&lt;BR&gt;1) 成员数据对齐&lt;BR&gt;#pragma pack(2)&lt;BR&gt;struct test_t {&lt;BR&gt;&amp;nbsp;int a;&amp;nbsp;&amp;nbsp;/* 长度4 &amp;gt; 2 按2对齐；起始offset=0 0%2=0；存放位置区间[0,3] */&lt;BR&gt;&amp;nbsp;char b;&amp;nbsp;&amp;nbsp;/* 长度1 &amp;lt; 2 按1对齐；起始offset=4 4%1=0；存放位置区间[4] */&lt;BR&gt;&amp;nbsp;short c;&amp;nbsp;/* 长度2 = 2 按2对齐；起始offset=6 6%2=0；存放位置区间[6,7] */&lt;BR&gt;&amp;nbsp;char d;&amp;nbsp;&amp;nbsp;/* 长度1 &amp;lt; 2 按1对齐；起始offset=8 8%1=0；存放位置区间[8] */&lt;BR&gt;};&lt;BR&gt;#pragma pack()&lt;BR&gt;成员总大小=9&lt;/P&gt;
&lt;P&gt;2) 整体对齐&lt;BR&gt;整体对齐系数 = min((max(int,short,char), 2) = 2&lt;BR&gt;整体大小(size)=$(成员总大小) 按 $(整体对齐系数) 圆整 = 10 /* 10%2=0 */&lt;/P&gt;
&lt;P&gt;3、4字节对齐(#pragma pack(4))&lt;BR&gt;输出结果：sizeof(struct test_t) = 12 [两个编译器输出一致]&lt;BR&gt;分析过程：&lt;BR&gt;1) 成员数据对齐&lt;BR&gt;#pragma pack(4)&lt;BR&gt;struct test_t {&lt;BR&gt;&amp;nbsp;int a;&amp;nbsp;&amp;nbsp;/* 长度4 = 4 按4对齐；起始offset=0 0%4=0；存放位置区间[0,3] */&lt;BR&gt;&amp;nbsp;char b;&amp;nbsp;&amp;nbsp;/* 长度1 &amp;lt; 4 按1对齐；起始offset=4 4%1=0；存放位置区间[4] */&lt;BR&gt;&amp;nbsp;short c;&amp;nbsp;/* 长度2 &amp;lt; 4 按2对齐；起始offset=6 6%2=0；存放位置区间[6,7] */&lt;BR&gt;&amp;nbsp;char d;&amp;nbsp;&amp;nbsp;/* 长度1 &amp;lt; 4 按1对齐；起始offset=8 8%1=0；存放位置区间[8] */&lt;BR&gt;};&lt;BR&gt;#pragma pack()&lt;BR&gt;成员总大小=9&lt;/P&gt;
&lt;P&gt;2) 整体对齐&lt;BR&gt;整体对齐系数 = min((max(int,short,char), 4) = 4&lt;BR&gt;整体大小(size)=$(成员总大小) 按 $(整体对齐系数) 圆整 = 12 /* 12%4=0 */&lt;/P&gt;
&lt;P&gt;4、8字节对齐(#pragma pack(8))&lt;BR&gt;输出结果：sizeof(struct test_t) = 12 [两个编译器输出一致]&lt;BR&gt;分析过程：&lt;BR&gt;1) 成员数据对齐&lt;BR&gt;#pragma pack(8)&lt;BR&gt;struct test_t {&lt;BR&gt;&amp;nbsp;int a;&amp;nbsp;&amp;nbsp;/* 长度4 &amp;lt; 8 按4对齐；起始offset=0 0%4=0；存放位置区间[0,3] */&lt;BR&gt;&amp;nbsp;char b;&amp;nbsp;&amp;nbsp;/* 长度1 &amp;lt; 8 按1对齐；起始offset=4 4%1=0；存放位置区间[4] */&lt;BR&gt;&amp;nbsp;short c;&amp;nbsp;/* 长度2 &amp;lt; 8 按2对齐；起始offset=6 6%2=0；存放位置区间[6,7] */&lt;BR&gt;&amp;nbsp;char d;&amp;nbsp;&amp;nbsp;/* 长度1 &amp;lt; 8 按1对齐；起始offset=8 8%1=0；存放位置区间[8] */&lt;BR&gt;};&lt;BR&gt;#pragma pack()&lt;BR&gt;成员总大小=9&lt;/P&gt;
&lt;P&gt;2) 整体对齐&lt;BR&gt;整体对齐系数 = min((max(int,short,char), 8) = 4&lt;BR&gt;整体大小(size)=$(成员总大小) 按 $(整体对齐系数) 圆整 = 12 /* 12%4=0 */&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;5、16字节对齐(#pragma pack(16))&lt;BR&gt;输出结果：sizeof(struct test_t) = 12 [两个编译器输出一致]&lt;BR&gt;分析过程：&lt;BR&gt;1) 成员数据对齐&lt;BR&gt;#pragma pack(16)&lt;BR&gt;struct test_t {&lt;BR&gt;&amp;nbsp;int a;&amp;nbsp;&amp;nbsp;/* 长度4 &amp;lt; 16 按4对齐；起始offset=0 0%4=0；存放位置区间[0,3] */&lt;BR&gt;&amp;nbsp;char b;&amp;nbsp;&amp;nbsp;/* 长度1 &amp;lt; 16 按1对齐；起始offset=4 4%1=0；存放位置区间[4] */&lt;BR&gt;&amp;nbsp;short c;&amp;nbsp;/* 长度2 &amp;lt; 16 按2对齐；起始offset=6 6%2=0；存放位置区间[6,7] */&lt;BR&gt;&amp;nbsp;char d;&amp;nbsp;&amp;nbsp;/* 长度1 &amp;lt; 16 按1对齐；起始offset=8 8%1=0；存放位置区间[8] */&lt;BR&gt;};&lt;BR&gt;#pragma pack()&lt;BR&gt;成员总大小=9&lt;/P&gt;
&lt;P&gt;2) 整体对齐&lt;BR&gt;整体对齐系数 = min((max(int,short,char), 16) = 4&lt;BR&gt;整体大小(size)=$(成员总大小) 按 $(整体对齐系数) 圆整 = 12 /* 12%4=0 */&lt;/P&gt;
&lt;P&gt;四、结论&lt;BR&gt;8字节和16字节对齐试验证明了&amp;#8220;规则&amp;#8221;的第3点：&amp;#8220;当#pragma pack的n值等于或超过所有数据成员长度的时候，这个n值的大小将不产生任何效果&amp;#8221;。另外内存对齐是个很复杂的东西，上面所说的在有些时候也可能不正确。呵呵^_^&lt;/P&gt;
&lt;P&gt;[注1]&lt;BR&gt;什么是&amp;#8220;圆整&amp;#8221;？&lt;BR&gt;举例说明：如上面的8字节对齐中的&amp;#8220;整体对齐&amp;#8221;，整体大小=9 按 4 圆整 = 12&lt;BR&gt;圆整的过程：从9开始每次加一，看是否能被4整除，这里9，10，11均不能被4整除，到12时可以，则圆整结束。&lt;/P&gt;&lt;/DIV&gt;</description></item><item><dc:creator>xiaoiiiyao</dc:creator><title>[Algorithm]堆排序(zz)</title><link>http://computer.mblogger.cn/xiaoiiiyao/posts/92511.aspx</link><pubDate>Mon, 10 Nov 2008 14:22:00 GMT</pubDate><guid>http://computer.mblogger.cn/xiaoiiiyao/posts/92511.aspx</guid><wfw:comment>http://computer.mblogger.cn/xiaoiiiyao/comments/92511.aspx</wfw:comment><comments>http://computer.mblogger.cn/xiaoiiiyao/posts/92511.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://computer.mblogger.cn/xiaoiiiyao/comments/commentRss/92511.aspx</wfw:commentRss><trackback:ping>http://computer.mblogger.cn/xiaoiiiyao/trackback.aspx?ID=92511</trackback:ping><description>1、 堆排序定义 &lt;BR&gt;n个关键字序列Kl，K2，&amp;#8230;，Kn称为堆，当且仅当该序列满足如下性质(简称为堆性质)： &lt;BR&gt;(1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤ ) &lt;BR&gt;&lt;BR&gt;若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构，则堆实质上是满足如下性质的完全二叉树：树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。 &lt;BR&gt;【例】关键字序列(10，15，56，25，30，70)和(70，56，30，25，15，10)分别满足堆性质(1)和(2)，故它们均是堆，其对应的完全二叉树分别如小根堆示例和大根堆示例所示。 &lt;BR&gt;2、大根堆和小根堆 &lt;BR&gt;根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最小者的堆称为小根堆。 &lt;BR&gt;根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者，称为大根堆。 &lt;BR&gt;注意： &lt;BR&gt;①堆中任一子树亦是堆。 &lt;BR&gt;②以上讨论的堆实际上是二叉堆(Binary Heap)，类似地可定义k叉堆。 &lt;BR&gt;3、堆排序特点 &lt;BR&gt;堆排序(HeapSort)是一树形选择排序。 &lt;BR&gt;堆排序的特点是：在排序过程中，将R[l..n]看成是一棵完全二叉树的顺序存储结构，利用完全二叉树中双亲结点和孩子结点之间的内在关系【参见二叉树的顺序存储结构】，在当前无序区中选择关键字最大(或最小)的记录。 &lt;BR&gt;4、堆排序与直接插入排序的区别 &lt;BR&gt;直接选择排序中，为了从R[1..n]中选出关键字最小的记录，必须进行n-1次比较，然后在R[2..n]中选出关键字最小的记录，又需要做n-2次比较。事实上，后面的n-2次比较中，有许多比较可能在前面的n-1次比较中已经做过，但由于前一趟排序时未保留这些比较结果，所以后一趟排序时又重复执行了这些比较操作。 &lt;BR&gt;堆排序可通过树形结构保存部分比较结果，可减少比较次数。 &lt;BR&gt;5、堆排序 &lt;BR&gt;堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征，使得在当前无序区中选取最大(或最小)关键字的记录变得简单。&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;1&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;/*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;2&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;堆排序&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;3&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;(1)用大根堆排序的基本思想&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;4&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;①&amp;nbsp;先将初始文件R[1..n]建成一个大根堆，此堆为初始的无序区&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;5&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;②&amp;nbsp;再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换，&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;6&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;由此得到新的无序区R[1..n-1]和有序区R[n]，且满足R[1..n-1].keys≤R[n].key&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;7&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;③&amp;nbsp;由于交换后新的根R[1]可能违反堆性质，故应将当前无序区R[1..n-1]调整为堆。&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;8&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;然后再次将R[1..n-1]中关键字最大的记录R[1]和该区间的最后一个记录R[n-1]交换，&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;9&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;由此得到新的无序区R[1..n-2]和有序区R[n-1..n]，且仍满足关系R[1..n-&amp;nbsp;2].keys≤R[n-1..n].keys，&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;10&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;同样要将R[1..n-2]调整为堆。&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;11&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;&amp;#8230;&amp;#8230;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;12&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;直到无序区只有一个元素为止。&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;13&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;(2)大根堆排序算法的基本操作：&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;14&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;①&amp;nbsp;初始化操作：将R[1..n]构造为初始堆；&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;15&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;②&amp;nbsp;每一趟排序的基本操作：将当前无序区的堆顶记录R[1]和该区间的最后一个记录交换，然后将新的无序区调整为堆(亦称重建堆)。&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;16&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;注意：&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;17&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;①只需做n-1趟排序，选出较大的n-1个关键字即可以使得文件递增有序。&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;18&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;②用小根堆排序与利用大根堆类似，只不过其排序结果是递减有序的。&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;19&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;堆排序和直接选择排序相反：在任何时刻，堆排序中无序区总是在有序区之前，&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;20&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;且有序区是在原向量的尾部由后往前逐步扩大至整个向量为止。&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;21&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;*/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;22&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;23&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;生成大根堆&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;24&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;HeapAdjust(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;SortData[],&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;StartIndex,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Length)&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;25&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;26&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;while&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;2&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;StartIndex&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Length)&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;27&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;28&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;MinChildrenIndex&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;2&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;StartIndex&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;29&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;2&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;StartIndex&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;2&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Length&amp;nbsp;)&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;30&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;31&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;比较左子树和右子树，记录最大值的Index&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;32&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(SortData[&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;2&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;StartIndex&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;]&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;SortData[&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;2&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;StartIndex&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;2&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;])&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;33&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;34&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MinChildrenIndex&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;2&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;StartIndex&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;2&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;35&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;36&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;37&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(SortData[StartIndex]&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;SortData[MinChildrenIndex])&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;38&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;39&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;交换i与MinChildrenIndex的数据&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;40&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;tmpData&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;SortData[StartIndex];&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;41&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SortData[StartIndex]&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;SortData[MinChildrenIndex];&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;42&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SortData[MinChildrenIndex]&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;tmpData;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;43&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;堆被破坏，需要重新调整&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;44&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StartIndex&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;MinChildrenIndex&amp;nbsp;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;45&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;46&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;else&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;47&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;48&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;比较左右孩子均大则堆未破坏，不再需要调整&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;49&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;break&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;50&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;51&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;52&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;53&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;54&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;}&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;55&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;56&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;堆排序&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;57&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;HeapSortData(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;SortData[],&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Length)&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;58&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;59&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;i&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;60&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;61&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;将Hr[0,Lenght-1]建成大根堆&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;62&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;for&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;(i&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;Length&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;2&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&amp;nbsp;i&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&amp;nbsp;i&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;--&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;)&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;63&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;64&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HeapAdjust(SortData,&amp;nbsp;i,&amp;nbsp;Length);&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;65&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;66&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;67&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;for&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;(i&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;Length&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&amp;nbsp;i&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&amp;nbsp;i&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;--&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;)&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;68&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;69&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;与最后一个记录交换&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;70&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;tmpData&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;SortData[&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;];&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;71&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SortData[&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;]&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;SortData[i];&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;72&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SortData[i]&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;tmpData;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;73&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;将H.r[0..i]重新调整为大根堆&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;74&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HeapAdjust(SortData,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&amp;nbsp;i);&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;75&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;76&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;77&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;78&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;</description></item><item><dc:creator>xiaoiiiyao</dc:creator><title>[Algorithm]分数变小数</title><link>http://computer.mblogger.cn/xiaoiiiyao/posts/92194.aspx</link><pubDate>Sun, 09 Nov 2008 22:55:00 GMT</pubDate><guid>http://computer.mblogger.cn/xiaoiiiyao/posts/92194.aspx</guid><wfw:comment>http://computer.mblogger.cn/xiaoiiiyao/comments/92194.aspx</wfw:comment><comments>http://computer.mblogger.cn/xiaoiiiyao/posts/92194.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://computer.mblogger.cn/xiaoiiiyao/comments/commentRss/92194.aspx</wfw:commentRss><trackback:ping>http://computer.mblogger.cn/xiaoiiiyao/trackback.aspx?ID=92194</trackback:ping><description>&lt;P&gt;1.分数变小数&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 写出一个程序，接受一个以N/D的形式输入的分数，其中N为分子，D为分母，输出它的小数形式。如果它的小数形式存在循环 节，要将其用括号括起来。例如：1/3=.00000...表示为.(3)，又如41/333=.123123123...表示为.(123)。&lt;BR&gt;一些转化的例子：&lt;BR&gt;1/3=.(3)&lt;BR&gt;22/5=4.4&lt;BR&gt;1/7=.(142857)&lt;BR&gt;3/8=.375&lt;BR&gt;45/46=.803(571428)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 用上面的分数和11/59来测试你的程序。&lt;BR&gt;运行举例：&lt;BR&gt;ENTER N，D：17&lt;BR&gt;1/7=.(142857)&lt;BR&gt;本题中，0&amp;lt;=N&amp;lt;=65535，0&amp;lt;=D&amp;lt;=65535，设运算结果小数点后最多保留100位。&lt;BR&gt;(1)解题思路&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 本题可以模仿手算除法的形式，重复地进行求商和余数的运算，直到余数为0或出现循环节为止。&lt;BR&gt;(2)参考程序&lt;BR&gt;Const Max=100;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; (小数点后最大位数)&lt;BR&gt;Var Left,Digit:Array[0..Max]of Word;&amp;nbsp; (记录每次的余数和商)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n,d:Word;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;q,Top:Word;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (q为循环字节的位置)&lt;BR&gt;Procedure Init;&lt;BR&gt;Begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write('ENTER N,D:');&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Readln(n,d);&lt;BR&gt;End;&lt;BR&gt;Procedure Cacl;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (计算)&lt;BR&gt;Var i:Word;&lt;BR&gt;Begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Digit[0]:=n Div d;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Left[0]:=n Mod d;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Top:=0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; q:=0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (初始化商和余数)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; While Left[Top]&amp;lt;&amp;gt; 0 Do&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (余数不为0则循环)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Inc(Top);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Digit[Top]:=(Left[Top-1]*10)Div d;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Left[Top]:=(Left[Top-1]*10)Mod d;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For i:=0 To Top-1 Do&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Left[Top]=Left[i] Then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; q:=i+1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (如果出现循环节则退出)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End;&lt;BR&gt;End;&lt;BR&gt;&lt;BR&gt;Procedure Print;&lt;BR&gt;Var i:Word;&lt;BR&gt;Begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write(n,'\',d,'=');&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If(Digit[0]&amp;lt;&amp;gt;0 Then Write(Digit[0]);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Top&amp;gt;0 Then Write('.');&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; For(i:=1 To Top Do&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If i=q Then Write('(');&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write(Digit[i]);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If q&amp;gt;0 Then Write(')');&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Writein;&lt;BR&gt;End;&lt;BR&gt;Begin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Init;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {读入数据}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cacl;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {计算}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Print;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {打印结果}&lt;BR&gt;End.&lt;BR&gt;(3)运行结果&lt;BR&gt;ENTER N，D：11 59&lt;BR&gt;11/59=.(1864406779661016949152542372881355932203389830508474576271)&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;附：改写后的C源程序如下：&lt;BR&gt;#include&amp;lt;stdio.h&amp;gt;&lt;BR&gt;#define Max 100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*小数点后最大位数*/&lt;BR&gt;int Left[Max];&lt;BR&gt;int Digit[Max];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*记录每次的余数和商*/&lt;BR&gt;int n,d,q,Top;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*q为循环字节的位置*/&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;void Init(void)&lt;BR&gt;{&lt;BR&gt;　&amp;nbsp;printf("ENTER N,D:");&lt;BR&gt;　&amp;nbsp;scanf("%d %d",&amp;amp;n,&amp;amp;d);&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;void Cacl(void)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*计算*/&lt;BR&gt;{&lt;BR&gt;　&amp;nbsp;int i=0,j=1;&lt;BR&gt;　&amp;nbsp;Digit[0]=n/d;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*求商*/&lt;BR&gt;　&amp;nbsp;Left[0]=n%d;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*求余数*/&lt;BR&gt;　&amp;nbsp;Top=0;&lt;BR&gt;　&amp;nbsp;q=0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*初始化商和余数*/&lt;BR&gt;　&amp;nbsp;while(Left[Top]!=0&amp;amp;&amp;amp;j==1&amp;amp;&amp;amp;Top&amp;lt;100)&lt;BR&gt;　&amp;nbsp;{&lt;BR&gt;　　&amp;nbsp;&amp;nbsp;Top++;　　　　　　　　　　　/*取下一个数组元素*/&lt;BR&gt;　　&amp;nbsp;&amp;nbsp;Digit[Top]=(Left[Top-1]*10)/d;　　　/*求商*/&lt;BR&gt;　　&amp;nbsp;&amp;nbsp;Left[Top]=(int)(Left[Top-1]*10)%d;　/*求余数*/&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;　　for(i=0;i&amp;lt;Top-1;i++)&lt;BR&gt;&amp;nbsp;&amp;nbsp;　　{&lt;BR&gt;&amp;nbsp;&amp;nbsp;　　　&amp;nbsp;if(Left[Top]==Left[i])　　　　/*如果出现循环节则退出*/&lt;BR&gt;&amp;nbsp;&amp;nbsp;　　　&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;　　　　&amp;nbsp;&amp;nbsp;q=i+1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;　　　　&amp;nbsp;&amp;nbsp;j=0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;　　　　&amp;nbsp;&amp;nbsp;break;&lt;BR&gt;&amp;nbsp;&amp;nbsp;　　　&amp;nbsp;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;　　}&lt;BR&gt;　&amp;nbsp;}&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;void Print(void)　　　　　　　　　　　/*输出计算结果*/&lt;BR&gt;{&lt;BR&gt;　&amp;nbsp;int i;&lt;BR&gt;　&amp;nbsp;printf("n/d=&amp;nbsp; ");&lt;BR&gt;　&amp;nbsp;if(Digit[0]!=0) printf("%d",Digit[0]);&lt;BR&gt;　&amp;nbsp;if(Top&amp;gt;0) printf(".");&lt;BR&gt;　&amp;nbsp;for(i=1;i&amp;lt;=Top;i++)&lt;BR&gt;　&amp;nbsp;{&lt;BR&gt;　　&amp;nbsp;&amp;nbsp;if(i==q)&amp;nbsp; printf("(");&lt;BR&gt;&amp;nbsp;&amp;nbsp;　　printf("%d",Digit[i]);&lt;BR&gt;　&amp;nbsp;}&lt;BR&gt;　&amp;nbsp;if(q&amp;gt;0)&amp;nbsp; printf(")");&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;void main(void)&lt;BR&gt;{&lt;BR&gt;　&amp;nbsp;Init();　　　　　　/*读入数据*/&lt;BR&gt;　&amp;nbsp;Cacl();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*计算*/&lt;BR&gt;　&amp;nbsp;Print();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*打印结果*/&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;</description></item><item><dc:creator>xiaoiiiyao</dc:creator><title>[Algorithm]由遍历结果求二叉树</title><link>http://computer.mblogger.cn/xiaoiiiyao/posts/92137.aspx</link><pubDate>Sun, 09 Nov 2008 11:29:00 GMT</pubDate><guid>http://computer.mblogger.cn/xiaoiiiyao/posts/92137.aspx</guid><wfw:comment>http://computer.mblogger.cn/xiaoiiiyao/comments/92137.aspx</wfw:comment><comments>http://computer.mblogger.cn/xiaoiiiyao/posts/92137.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://computer.mblogger.cn/xiaoiiiyao/comments/commentRss/92137.aspx</wfw:commentRss><trackback:ping>http://computer.mblogger.cn/xiaoiiiyao/trackback.aspx?ID=92137</trackback:ping><description>&lt;P&gt;&amp;nbsp; 已知前序是ABCDEFG &amp;nbsp; 中序是CBEDAFG &amp;nbsp; 求二叉树 &amp;nbsp; &lt;BR&gt;&amp;nbsp; &amp;nbsp; &lt;BR&gt;&amp;nbsp; 首先从取前序第1个字母(A) &amp;nbsp; 按此字母把中序分成两段 &amp;nbsp; (CBED) &amp;nbsp; (AFG) &amp;nbsp; &lt;BR&gt;&amp;nbsp; A做根 &amp;nbsp; (CBED)做左子树 &amp;nbsp; (FG)右子树 &amp;nbsp; &lt;BR&gt;&amp;nbsp; 再按长度把前序后面的部分分成(BCDE) &amp;nbsp; (FG) &amp;nbsp; &lt;BR&gt;&amp;nbsp; &amp;nbsp; &lt;BR&gt;&amp;nbsp; 问题就转换成 &amp;nbsp; &lt;BR&gt;&amp;nbsp; 已知前序是BCDE &amp;nbsp; 中序是CBED &amp;nbsp; 求二叉树 &amp;nbsp; &lt;BR&gt;&amp;nbsp; 和 &amp;nbsp; &lt;BR&gt;&amp;nbsp; 已经前序是FG &amp;nbsp; 中序是FG &amp;nbsp; 求二叉树 &amp;nbsp; &lt;BR&gt;&amp;nbsp; &amp;nbsp; &lt;BR&gt;&amp;nbsp; 看出来了没有,递归求解的. &amp;nbsp; &lt;BR&gt;&amp;nbsp; 下面的步骤省略分析. &amp;nbsp; &lt;BR&gt;&amp;nbsp; 前序 &amp;nbsp; 中序 &amp;nbsp; : &amp;nbsp; 根 &amp;nbsp; 左子树分解 &amp;nbsp; 右子树分解 &amp;nbsp; &lt;BR&gt;&amp;nbsp; BCDE &amp;nbsp; CBED &amp;nbsp; : &amp;nbsp; B &amp;nbsp; &amp;nbsp; &amp;nbsp; (C) &amp;nbsp; (C) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (ED) &amp;nbsp; (DE) &amp;nbsp; &lt;BR&gt;&amp;nbsp; C &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; C &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : &amp;nbsp; C &amp;nbsp; &lt;BR&gt;&amp;nbsp; DE　 &amp;nbsp; ED &amp;nbsp; &amp;nbsp; &amp;nbsp; : &amp;nbsp; D &amp;nbsp; &amp;nbsp; &amp;nbsp; (E) &amp;nbsp; (E) &amp;nbsp; &lt;BR&gt;&amp;nbsp; E &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; E &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : &amp;nbsp; E &amp;nbsp; &lt;BR&gt;&amp;nbsp; &amp;nbsp; &lt;BR&gt;&amp;nbsp; FG &amp;nbsp; &amp;nbsp; &amp;nbsp; FG &amp;nbsp; &amp;nbsp; &amp;nbsp; : &amp;nbsp; F &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (G) &amp;nbsp; (G) &amp;nbsp; &lt;BR&gt;&amp;nbsp; G &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; G &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : &amp;nbsp; G &amp;nbsp; &lt;BR&gt;&amp;nbsp; 得出的二叉树就是 &amp;nbsp; &lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; A &amp;nbsp; &lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; / &amp;nbsp; \ &amp;nbsp; &lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; B &amp;nbsp; &amp;nbsp; &amp;nbsp; F &amp;nbsp; &lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; / &amp;nbsp; \ &amp;nbsp; &amp;nbsp; &amp;nbsp; \ &amp;nbsp; &lt;BR&gt;&amp;nbsp; &amp;nbsp; C &amp;nbsp; &amp;nbsp; &amp;nbsp; D &amp;nbsp; &amp;nbsp; &amp;nbsp; G &amp;nbsp; &lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; / &amp;nbsp; &lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; E&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;同理可算，一直后序遍历和中序遍历求二叉树。&lt;/P&gt;
&lt;P&gt;/*&lt;BR&gt;&amp;nbsp;*已知一棵二叉树的先序遍历序列和中序遍历序列分别存于两个一维数组中；试编写算法建立该二叉树的二叉链表&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;*&lt;BR&gt;&amp;nbsp;*下面给出用C语言描述的该算法。假设二叉树的先序序列和中序序列分别存放在一维数组preod[&amp;nbsp;&amp;nbsp; ]与inod[&amp;nbsp;&amp;nbsp; ]中，并假设二叉树各结点的数据值均不相同。&amp;nbsp; &lt;BR&gt;&amp;nbsp;*/&lt;/P&gt;
&lt;P&gt;/*n为二叉树的结点个数，root为二叉树根结点的存储地址*/ &lt;BR&gt;void ReBiTree(char preod[],char inod[],int n,BiTree root)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;{&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (n≤0)&amp;nbsp;&amp;nbsp; root=NULL;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else PreInOd(preod,inod,1,n,1,n,&amp;amp;root);&amp;nbsp;&amp;nbsp; &lt;BR&gt;}&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;void&amp;nbsp; PreInOd(char preod[],char inod[],int i,int j, int k, int h,BiTree *t）&amp;nbsp;&amp;nbsp; &lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BiTree* t=(BiTNode*)malloc(sizeof(BiTNode));&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *t-&amp;gt;data=preod[i];&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int m=k;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(inod[m]!=preod[i]) m++;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (m==k) *t-&amp;gt;lchild=NULL;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else PreInOd(preod,inod,i+1,i+m-k,k,m-1,&amp;amp;t-&amp;gt;lchild);&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (m==h) *t-&amp;gt;rchild=NULL;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else PreInOd(preod,inod,i+m-k+1,j,m+1,h,&amp;amp;t-&amp;gt;rchild);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;}&amp;nbsp;&amp;nbsp; &lt;/P&gt;</description></item><item><dc:creator>xiaoiiiyao</dc:creator><title>[Algorithm]一道算法笔试题（zz）</title><link>http://computer.mblogger.cn/xiaoiiiyao/posts/91369.aspx</link><pubDate>Fri, 07 Nov 2008 15:18:00 GMT</pubDate><guid>http://computer.mblogger.cn/xiaoiiiyao/posts/91369.aspx</guid><wfw:comment>http://computer.mblogger.cn/xiaoiiiyao/comments/91369.aspx</wfw:comment><comments>http://computer.mblogger.cn/xiaoiiiyao/posts/91369.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://computer.mblogger.cn/xiaoiiiyao/comments/commentRss/91369.aspx</wfw:commentRss><trackback:ping>http://computer.mblogger.cn/xiaoiiiyao/trackback.aspx?ID=91369</trackback:ping><description>&lt;P class="g_w_100 g_t_wrap g_t_center g_t_bold g_t_24 g_c_pdin c07" id=blogtitle_fks_085064085086084064087085095095082081084071092094081&gt;淘宝网校园招聘笔试题&lt;/P&gt;
&lt;DIV class=g_blog_list&gt;
&lt;DIV class="g_t_center g_c_pdin g_p_center c07 content" id=blogtext_fks_085064085086084064087085095095082081084071092094081 style="WIDTH: 760px"&gt;&lt;BR&gt;
&lt;P&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;【题目】&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="FONT-WEIGHT: bold"&gt;n &lt;/SPAN&gt;是一个整数，对它进行如下循环操作：若 &lt;SPAN style="FONT-WEIGHT: bold"&gt;n &lt;/SPAN&gt;是奇数，将 &lt;SPAN style="FONT-WEIGHT: bold"&gt;n &lt;/SPAN&gt;增加一或减少一；若 &lt;SPAN style="FONT-WEIGHT: bold"&gt;n &lt;/SPAN&gt;是偶数，将它减小一半。 求最短的步骤把 &lt;SPAN style="FONT-WEIGHT: bold"&gt;n &lt;/SPAN&gt;变成 1。&lt;SPAN style="FONT-STYLE: italic"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;EM&gt;（&lt;SPAN style="FONT-WEIGHT: bold"&gt;题目来源&lt;/SPAN&gt;：淘宝网 2008 校园招聘笔试题;&amp;nbsp; &lt;A href="http://groups.google.com/group/pongba/browse_thread/thread/f23484bfd866e7c8?hl=zh-CN" target=_blank&gt;&lt;FONT color=#006600&gt;TopLanguage论坛&lt;/FONT&gt;&lt;/A&gt;有讨论）&lt;/EM&gt;&lt;/P&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;
&lt;P&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;【解答一】&lt;/STRONG&gt;&lt;/FONT&gt; &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们的讨论将针对 &lt;SPAN style="FONT-WEIGHT: bold"&gt;n &lt;/SPAN&gt;的二进制表示。 总的操作次数就是除法次数和加（减）法次数的和，而除法次数是固定的，除了一种情况，那就是通过加法增加了一个位长，但这种情况最多出现一次，因为一旦&amp;#8220;溢出&amp;#8221;，低位部分全部变成了&amp;#8220;0&amp;#8221;，接下来就不会涉及加（减）法了。 现在来看：&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;EM&gt;（1）&lt;/EM&gt;&lt;/STRONG&gt; 如果低位是&amp;#8220;01&amp;#8221;，那么减一能消掉一个&amp;#8220;1&amp;#8221;，但加一则不行，而且加一对高位也不会起&amp;#8220;辅助&amp;#8221;作用，比如 &amp;#8220;11101&amp;#8221;，虽然加一能变成 &amp;#8220;11110&amp;#8221;，接下来通过加一能消掉一大片&amp;#8220;1&amp;#8221;，但是这同样可以通过先减一变为 &amp;#8220;11100&amp;#8221;，然后加一消掉一大片&amp;#8220;1&amp;#8221; 来实现，不会比前种方法差； &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;EM&gt;（2）&lt;/EM&gt;&lt;/STRONG&gt; 如果低位是&amp;#8220;011&amp;#8221;，那么加/减一都消掉一个&amp;#8220;1&amp;#8221;，但是减一不会对高位起&amp;#8220;辅助&amp;#8221;作用，而加一有可能对高位起&amp;#8220;辅助&amp;#8221;作用从而达到更优的解。比如 &amp;#8220;11011&amp;#8221;，加一变为 &amp;#8220;11100&amp;#8221;，再加一可变为 &amp;#8220;100000&amp;#8221;，两次加法就够了；要是先减一的话，变为 &amp;#8220;11010&amp;#8221;，同样是剩三个&amp;#8220;1&amp;#8221;，但要多次加减操作才能消掉它们。 当然，这里 &amp;#8220;011&amp;#8221; 指的是前面还有&amp;#8220;1&amp;#8221;，所以加一后并不&amp;#8220;溢出&amp;#8221;，故没有增加除法次数。但你或许会说，到时候&amp;#8220;1&amp;#8221;都被推到高位后，有可能要溢出。然而仔细想想，到时候若真需要对它进行溢出，那么肯定是剩有连续三个以上（含三个）&amp;#8220;1&amp;#8221;，而这样&amp;#8220;溢出&amp;#8221;虽增加了一次除法，但减法却减少了一次以上，更加有利；否则，比如特例 3，即&amp;#8220;11&amp;#8221;，自然是先减一再折半更优。所以溢不溢出到时还是由你说了算，溢出有利就溢出，否则就不溢出，现在先不管三七二十一，将&amp;#8220;1&amp;#8221;推向高位，让更多的&amp;#8220;1&amp;#8221;挤在一起再说。&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;EM&gt;（3）&lt;/EM&gt;&lt;/STRONG&gt; 如果低位有多于两个的连续&amp;#8220;1&amp;#8221;，显然加一比减一能消去更多的&amp;#8220;1&amp;#8221;，并且可能对高位产生&amp;#8220;辅助&amp;#8221;作用，优上加优。 &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;STRONG&gt;&lt;EM&gt;//=====================================================================// &lt;BR&gt;&lt;/EM&gt;&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 经过以上讨论，可以概括出如下算法： &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG style="COLOR: rgb(51,102,255)"&gt;&lt;EM&gt;REPEAT_UNTIL&lt;/EM&gt;&lt;/STRONG&gt;&lt;SPAN style="COLOR: rgb(51,102,255)"&gt; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG style="COLOR: rgb(255,0,0)"&gt;n&lt;/STRONG&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt; = 1&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: rgb(0,128,0)"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;EM style="COLOR: rgb(0,128,0)"&gt;&lt;STRONG&gt;IF&lt;/STRONG&gt;&lt;/EM&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="COLOR: rgb(255,0,0)"&gt;n&lt;/STRONG&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt; &amp;lt;= 3&lt;/SPAN&gt;&lt;EM&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: rgb(0,128,0)"&gt;THEN&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/EM&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt;&amp;nbsp;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;U style="COLOR: rgb(0,128,128)"&gt;直接处理&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: rgb(0,128,0)"&gt;ELSE&lt;/SPAN&gt;&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;IF&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: rgb(255,0,0)"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/EM&gt;&lt;STRONG style="COLOR: rgb(255,0,0)"&gt;n&lt;/STRONG&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt; mod 4 = 1&amp;nbsp; &lt;/SPAN&gt;&lt;U style="COLOR: rgb(128,128,128)"&gt;即低位为&amp;#8220;01&amp;#8221;&lt;SPAN style="FONT-WEIGHT: bold"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/U&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;STRONG style="COLOR: rgb(0,0,255)"&gt;&lt;EM&gt;THEN&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: rgb(0,128,128)"&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/STRONG&gt;&lt;STRONG style="COLOR: rgb(0,128,128)"&gt;n&lt;/STRONG&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt; := &lt;/SPAN&gt;&lt;STRONG style="COLOR: rgb(0,128,128)"&gt;n&lt;/STRONG&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt; - 1&lt;/SPAN&gt;&lt;EM&gt;&lt;STRONG&gt; &lt;BR&gt;&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;ELSE_IF&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: rgb(255,0,0)"&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/EM&gt;&lt;STRONG style="COLOR: rgb(255,0,0)"&gt;n&lt;/STRONG&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt; mod 4 = 3 &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(153,153,153)"&gt;&lt;/SPAN&gt;&lt;U style="COLOR: rgb(128,128,128)"&gt;即低位多于一个连续的&amp;#8220;1&amp;#8221;&lt;/U&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;EM&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;THEN&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp; &lt;/STRONG&gt;&lt;/EM&gt;&lt;STRONG style="COLOR: rgb(0,128,128)"&gt;n&lt;/STRONG&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt; := &lt;/SPAN&gt;&lt;STRONG style="COLOR: rgb(0,128,128)"&gt;n&lt;/STRONG&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt; + 1&lt;/SPAN&gt;&lt;EM&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold; COLOR: rgb(0,0,255); FONT-STYLE: italic"&gt;ELSE&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold; COLOR: rgb(0,128,128)"&gt;n&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt; := &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold; COLOR: rgb(0,128,128)"&gt;n&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt; / 2&lt;/SPAN&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt;&amp;nbsp;&lt;/SPAN&gt;&amp;nbsp; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold; COLOR: rgb(0,0,255); FONT-STYLE: italic"&gt;END_IF&lt;/SPAN&gt; &lt;BR&gt;&lt;EM&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: rgb(0,128,0)"&gt;END_IF&lt;/SPAN&gt;&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: rgb(51,102,255)"&gt;END_REPEAT &lt;/SPAN&gt;&lt;BR&gt;&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;//=====================================================================//&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;BR&gt;&lt;BR&gt;
&lt;P align=left&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;【解答二】&lt;/STRONG&gt;&lt;/FONT&gt; &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 事实上，我们可以用更&amp;#8220;数学&amp;#8221;的方法得到以上结果。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 设 &lt;STRONG&gt;f(n)&lt;/STRONG&gt; 表示 &lt;STRONG&gt;n&lt;/STRONG&gt; 变为 &lt;STRONG&gt;1&lt;/STRONG&gt; 所需的最少操作次数，很容易得出状态转移方程 &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="http://img.blog.163.com/photo/BPLbz-IDvLK0xV_A4FhWgw==/3448349939683171684"&gt;&lt;IMG height=49 alt=image src="http://img.blog.163.com/photo/eFW5V7rRdzAV9QwTa2WnBA==/5399534478241659883" width=316&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 为了将动态规划算法优化为贪心算法，需要获取更多信息，从而剪去状态转移方程中的 &lt;STRONG&gt;min &lt;/STRONG&gt;函数。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 可以考虑以下不等式：&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="http://img.blog.163.com/photo/YzYoAmrj-7amVXrvCTFKCA==/5399534478241659884"&gt;&lt;IMG height=25 alt=image src="http://img.blog.163.com/photo/x0j1GjosQSDTKa0pAyb7-Q==/5399534478241659885" width=200&gt;&lt;FONT color=#006600&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/A&gt;&lt;EM&gt;&lt;STRONG&gt;(IEQ1)&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 证&lt;/SPAN&gt;： 利用数学归纳法。 显然&lt;SPAN style="FONT-WEIGHT: bold"&gt; k=1,2&lt;/SPAN&gt; 时成立。 所以仅需证明&lt;SPAN style="FONT-WEIGHT: bold"&gt; f(2k+2) &amp;lt;= f(2k+3)&lt;/SPAN&gt;，即&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="FONT-WEIGHT: bold"&gt;1 + f(k+1) &amp;lt;= 2 + min{ f(k+1), f(k+2) }&lt;/SPAN&gt;，仅需证明 &lt;SPAN style="FONT-WEIGHT: bold"&gt;f(k+1) &amp;lt;= 1 + f(k+2)&lt;/SPAN&gt;。 &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 若 &lt;SPAN style="FONT-WEIGHT: bold"&gt;k=2t&lt;/SPAN&gt;，即需证明 &lt;SPAN style="FONT-WEIGHT: bold"&gt;f(2t+1) &amp;lt;= 1 + f(2t+2)&lt;/SPAN&gt;，即 &lt;SPAN style="FONT-WEIGHT: bold"&gt;2 + min{ f(t), f(t+1) } &amp;lt;= 2 + f(t+1)&lt;/SPAN&gt;，显然成立； &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 若 &lt;SPAN style="FONT-WEIGHT: bold"&gt;k=2t+1&lt;/SPAN&gt;，即需证明 &lt;SPAN style="FONT-WEIGHT: bold"&gt;f(2t+2) &amp;lt;= 1 + f(2t+3)&lt;/SPAN&gt;，仅需证明 &lt;SPAN style="FONT-WEIGHT: bold"&gt;f( 2(t+1) ) &amp;lt;= f( 2(t+1)+1 )&lt;/SPAN&gt;，而&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="FONT-WEIGHT: bold"&gt;k-(t+1) = t &amp;gt; 0&lt;/SPAN&gt;，故 &lt;SPAN style="FONT-WEIGHT: bold"&gt;(t+1) &amp;lt; k&lt;/SPAN&gt;，由归纳假设即知不等式成立。 &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="http://img.blog.163.com/photo/yS8G00aJz27krsOMq8lxmQ==/3448349939683171685"&gt;&lt;IMG height=25 alt=image src="http://img.blog.163.com/photo/uCCHD0XrXw7d8x7qjmUClQ==/5399534478241659886" width=205&gt;&lt;FONT color=#006600&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/A&gt;&lt;EM&gt;&lt;STRONG&gt;(IEQ2)&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 证&lt;/SPAN&gt;： 同样利用数学归纳法。 显然 &lt;SPAN style="FONT-WEIGHT: bold"&gt;k=1,2&lt;/SPAN&gt; 时成立。 所以仅需证明&lt;SPAN style="FONT-WEIGHT: bold"&gt; f(2k+3) &amp;gt;= f(2k+4)&lt;/SPAN&gt;，即&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="FONT-WEIGHT: bold"&gt;2 + min{ f(k+1), f(k+2) } &amp;gt;= 1 + f(k+2)&lt;/SPAN&gt;，仅需证明 &lt;SPAN style="FONT-WEIGHT: bold"&gt;1 + f(k+1) &amp;gt;= f(k+2)&lt;/SPAN&gt;。 &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 若 &lt;SPAN style="FONT-WEIGHT: bold"&gt;k=2t&lt;/SPAN&gt;，即需证明 &lt;SPAN style="FONT-WEIGHT: bold"&gt;1 + f(2t+1) &amp;gt;= f(2t+2)&lt;/SPAN&gt;，仅需证明 &lt;SPAN style="FONT-WEIGHT: bold"&gt;f(2t+1) &amp;gt;= f(2t+2)&lt;/SPAN&gt;，而显然&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="FONT-WEIGHT: bold"&gt;t&amp;lt;=k&lt;/SPAN&gt;，由归纳假设，不等式成立；&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 若 &lt;SPAN style="FONT-WEIGHT: bold"&gt;k=2t+1&lt;/SPAN&gt;，即需证明 &lt;SPAN style="FONT-WEIGHT: bold"&gt;1 + f(2t+2) &amp;gt;= f(2t+3)&lt;/SPAN&gt;，即 &lt;SPAN style="FONT-WEIGHT: bold"&gt;2 + f(t+1) &amp;gt;= 2 + min{ f(t+1), f(t+2) }&lt;/SPAN&gt;，这是显然的。 &lt;/P&gt;&lt;BR&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 有了 &lt;STRONG&gt;&lt;EM&gt;(IEQ1)&lt;/EM&gt;&lt;/STRONG&gt; &lt;STRONG&gt;&lt;EM&gt;(IEQ2)&lt;/EM&gt;&lt;/STRONG&gt;&amp;nbsp; 两个不等式，事情就很好办了：&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="http://img.blog.163.com/photo/V9A18VJTEHDWLfB9c9lAbg==/3448349939683171686"&gt;&lt;IMG height=49 alt=image src="http://img.blog.163.com/photo/gM97rJ5FS9SRzBh-4iP3OQ==/5399534478241659887" width=336&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="http://img.blog.163.com/photo/lcLiBxWnZeJGxqVBWMVqug==/2831075315756693415"&gt;&lt;IMG height=48 alt=image src="http://img.blog.163.com/photo/-SKpn2jLS2pLswV1Q3EiuA==/3448349939683171687" width=336&gt;&lt;/A&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 马上得到了我们&lt;SPAN style="FONT-WEIGHT: bold"&gt; [解答一]&lt;/SPAN&gt; 中辛苦探索出的又不容易将正确性的论据严格说清楚的贪心算法。 &lt;/P&gt;&lt;BR&gt;&lt;BR&gt;
&lt;P align=left&gt;&lt;STRONG&gt;&lt;FONT size=3&gt;【数据与验证】 &lt;/FONT&gt;&lt;BR&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 有了算法，我们可以编写程序获取一些数据，从而对问题有更直观的认识。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 由于动态规划算法是最容易想到也最&amp;#8220;显然&amp;#8221;的，所以将以此为标准算法产生参考数据，来验证我们的简明算法的正确性。 程序如下： &lt;BR&gt;&lt;/P&gt;
&lt;DIV&gt;&lt;PRE&gt;&lt;SPAN&gt;   1:  &lt;/SPAN&gt;#include &amp;lt;iostream&amp;gt; &lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;   2:  &lt;/SPAN&gt;&lt;SPAN&gt;using&lt;/SPAN&gt; &lt;SPAN&gt;namespace&lt;/SPAN&gt; std; &lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;   3:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;   4:  &lt;/SPAN&gt;&lt;SPAN&gt;#define&lt;/SPAN&gt; MAX_RANGE 9999999 &lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;   5:  &lt;/SPAN&gt;unsigned tab[ MAX_RANGE + 1 ] = { 0, 0, 1, 2 };&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;   6:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;   7:  &lt;/SPAN&gt;&lt;SPAN&gt;int&lt;/SPAN&gt; main(){&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;   8:  &lt;/SPAN&gt;    unsigned num, count, tmp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;   9:  &lt;/SPAN&gt;    &lt;SPAN&gt;bool&lt;/SPAN&gt; coincidental = &lt;SPAN&gt;true&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  10:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  11:  &lt;/SPAN&gt;    &lt;SPAN&gt;for&lt;/SPAN&gt;(num=4; num &amp;lt; MAX_RANGE; num++){&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  12:  &lt;/SPAN&gt;        &lt;SPAN&gt;// 利用动态规划求得参考数据 &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  13:  &lt;/SPAN&gt;        &lt;SPAN&gt;if&lt;/SPAN&gt;( num &amp;amp; 1 )&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  14:  &lt;/SPAN&gt;            tab[num] = 2 + min( tab[ num/2 ], tab[ num/2 + 1 ] );&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  15:  &lt;/SPAN&gt;        &lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  16:  &lt;/SPAN&gt;            tab[num] = 1 + tab[ num&amp;gt;&amp;gt;1 ];&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  17:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  18:  &lt;/SPAN&gt;        &lt;SPAN&gt;// 施行操作并统计操作次数 &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  19:  &lt;/SPAN&gt;        &lt;SPAN&gt;for&lt;/SPAN&gt;(tmp=num,count=0; tmp &amp;gt; 3; tmp&amp;gt;&amp;gt;=1,count++){&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  20:  &lt;/SPAN&gt;            &lt;SPAN&gt;switch&lt;/SPAN&gt;( tmp &amp;amp; 3 ){&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  21:  &lt;/SPAN&gt;            &lt;SPAN&gt;case&lt;/SPAN&gt; 1:&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  22:  &lt;/SPAN&gt;                tmp--, count++;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  23:  &lt;/SPAN&gt;                &lt;SPAN&gt;break&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  24:  &lt;/SPAN&gt;            &lt;SPAN&gt;case&lt;/SPAN&gt; 3:&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  25:  &lt;/SPAN&gt;                tmp++, count++;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  26:  &lt;/SPAN&gt;                &lt;SPAN&gt;break&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  27:  &lt;/SPAN&gt;            }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  28:  &lt;/SPAN&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  29:  &lt;/SPAN&gt;        count += ( tmp == 2 ? 1 : 2 );&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  30:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  31:  &lt;/SPAN&gt;        &lt;SPAN&gt;// 输出不符合参考数据的操作次数&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  32:  &lt;/SPAN&gt;        &lt;SPAN&gt;if&lt;/SPAN&gt;( count != tab[num] ){&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  33:  &lt;/SPAN&gt;            coincidental = &lt;SPAN&gt;false&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  34:  &lt;/SPAN&gt;            cout&amp;lt;&amp;lt;num&amp;lt;&amp;lt;&lt;SPAN&gt;": "&lt;/SPAN&gt;&amp;lt;&amp;lt;count&amp;lt;&amp;lt;&lt;SPAN&gt;"\t"&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  35:  &lt;/SPAN&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  36:  &lt;/SPAN&gt;    }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  37:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  38:  &lt;/SPAN&gt;    &lt;SPAN&gt;if&lt;/SPAN&gt;( coincidental ) &lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  39:  &lt;/SPAN&gt;        cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&lt;SPAN&gt;"所有答案都是正确的。"&lt;/SPAN&gt;&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl; &lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  40:  &lt;/SPAN&gt;    &lt;SPAN&gt;else&lt;/SPAN&gt; &lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  41:  &lt;/SPAN&gt;        cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&lt;SPAN&gt;"以上答案不准确。"&lt;/SPAN&gt;&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl; &lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  42:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  43:  &lt;/SPAN&gt;    cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&lt;SPAN&gt;"前 100 个数的最优次数如下表："&lt;/SPAN&gt;&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  44:  &lt;/SPAN&gt;    &lt;SPAN&gt;for&lt;/SPAN&gt;(num=1; num &amp;lt; 101; num++){&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  45:  &lt;/SPAN&gt;        cout&amp;lt;&amp;lt;num&amp;lt;&amp;lt;&lt;SPAN&gt;": "&lt;/SPAN&gt;&amp;lt;&amp;lt;tab[num]&amp;lt;&amp;lt;&lt;SPAN&gt;"\t"&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  46:  &lt;/SPAN&gt;        &lt;SPAN&gt;if&lt;/SPAN&gt;( num % 5 == 0 )&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  47:  &lt;/SPAN&gt;            cout&amp;lt;&amp;lt;endl;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  48:  &lt;/SPAN&gt;    }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  49:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  50:  &lt;/SPAN&gt;    &lt;SPAN&gt;return&lt;/SPAN&gt; 0; &lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;  51:  &lt;/SPAN&gt;}&lt;/PRE&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV c07 content?&gt;
&lt;STYLE type=text/css&gt;




.csharpcode, .csharpcode pre
{
 font-size: small;
 color: black;
 font-family: consolas, "Courier New", courier, monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;

&lt;P&gt;&lt;SPAN style="FONT-WEIGHT: bold; FONT-STYLE: italic"&gt;//=========================================================//&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG&gt;运行结果如下：&lt;/STRONG&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 所有答案都是正确的。 &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 前 100 个数的最优次数如下表： &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1: 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2: 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3: 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4: 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5: 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6: 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7: 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8: 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9: 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10: 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 11: 5&amp;nbsp;&amp;nbsp;&amp;nbsp; 12: 4&amp;nbsp;&amp;nbsp;&amp;nbsp; 13: 5&amp;nbsp;&amp;nbsp;&amp;nbsp; 14: 5&amp;nbsp;&amp;nbsp;&amp;nbsp; 15: 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 16: 4&amp;nbsp;&amp;nbsp;&amp;nbsp; 17: 5&amp;nbsp;&amp;nbsp;&amp;nbsp; 18: 5&amp;nbsp;&amp;nbsp;&amp;nbsp; 19: 6&amp;nbsp;&amp;nbsp;&amp;nbsp; 20: 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 21: 6&amp;nbsp;&amp;nbsp;&amp;nbsp; 22: 6&amp;nbsp;&amp;nbsp;&amp;nbsp; 23: 6&amp;nbsp;&amp;nbsp;&amp;nbsp; 24: 5&amp;nbsp;&amp;nbsp;&amp;nbsp; 25: 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 26: 6&amp;nbsp;&amp;nbsp;&amp;nbsp; 27: 7&amp;nbsp;&amp;nbsp;&amp;nbsp; 28: 6&amp;nbsp;&amp;nbsp;&amp;nbsp; 29: 7&amp;nbsp;&amp;nbsp;&amp;nbsp; 30: 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 31: 6&amp;nbsp;&amp;nbsp;&amp;nbsp; 32: 5&amp;nbsp;&amp;nbsp;&amp;nbsp; 33: 6&amp;nbsp;&amp;nbsp;&amp;nbsp; 34: 6&amp;nbsp;&amp;nbsp;&amp;nbsp; 35: 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 36: 6&amp;nbsp;&amp;nbsp;&amp;nbsp; 37: 7&amp;nbsp;&amp;nbsp;&amp;nbsp; 38: 7&amp;nbsp;&amp;nbsp;&amp;nbsp; 39: 7&amp;nbsp;&amp;nbsp;&amp;nbsp; 40: 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 41: 7&amp;nbsp;&amp;nbsp;&amp;nbsp; 42: 7&amp;nbsp;&amp;nbsp;&amp;nbsp; 43: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 44: 7&amp;nbsp;&amp;nbsp;&amp;nbsp; 45: 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 46: 7&amp;nbsp;&amp;nbsp;&amp;nbsp; 47: 7&amp;nbsp;&amp;nbsp;&amp;nbsp; 48: 6&amp;nbsp;&amp;nbsp;&amp;nbsp; 49: 7&amp;nbsp;&amp;nbsp;&amp;nbsp; 50: 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 51: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 52: 7&amp;nbsp;&amp;nbsp;&amp;nbsp; 53: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 54: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 55: 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 56: 7&amp;nbsp;&amp;nbsp;&amp;nbsp; 57: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 58: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 59: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 60: 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 61: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 62: 7&amp;nbsp;&amp;nbsp;&amp;nbsp; 63: 7&amp;nbsp;&amp;nbsp;&amp;nbsp; 64: 6&amp;nbsp;&amp;nbsp;&amp;nbsp; 65: 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 66: 7&amp;nbsp;&amp;nbsp;&amp;nbsp; 67: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 68: 7&amp;nbsp;&amp;nbsp;&amp;nbsp; 69: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 70: 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 71: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 72: 7&amp;nbsp;&amp;nbsp;&amp;nbsp; 73: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 74: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 75: 9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 76: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 77: 9&amp;nbsp;&amp;nbsp;&amp;nbsp; 78: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 79: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 80: 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 81: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 82: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 83: 9&amp;nbsp;&amp;nbsp;&amp;nbsp; 84: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 85: 9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 86: 9&amp;nbsp;&amp;nbsp;&amp;nbsp; 87: 9&amp;nbsp;&amp;nbsp;&amp;nbsp; 88: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 89: 9&amp;nbsp;&amp;nbsp;&amp;nbsp; 90: 9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 91: 9&amp;nbsp;&amp;nbsp;&amp;nbsp; 92: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 93: 9&amp;nbsp;&amp;nbsp;&amp;nbsp; 94: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 95: 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 96: 7&amp;nbsp;&amp;nbsp;&amp;nbsp; 97: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 98: 8&amp;nbsp;&amp;nbsp;&amp;nbsp; 99: 9&amp;nbsp;&amp;nbsp;&amp;nbsp; 100: 8 &lt;BR&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="FONT-WEIGHT: bold; FONT-STYLE: italic"&gt;//=========================================================//&lt;/P&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P style="FONT-WEIGHT: bold"&gt;【返璞归真】&lt;/P&gt;
&lt;P style="FONT-WEIGHT: bold"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="FONT-WEIGHT: normal"&gt;一个算法，并不是越玄乎越高深越好，而是越朴素越简单越直观&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: normal"&gt;越容易理解&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: normal"&gt;越好。 所以，接下来我们要引出一个所有人（包括没有算法感的人）都能理解的算法。 由于这个算法的直观性，所以我不打算多费口舌，而是直接给出一个示例图，大家看了就明白了。&lt;/SPAN&gt;&amp;nbsp;&lt;A href="http://img.blog.163.com/photo/-LBEN_SspljkqEXzUbGkfA==/3731795241230603016"&gt;&lt;FONT color=#006600&gt; &lt;IMG style="DISPLAY: block; WIDTH: 441px; HEIGHT: 573px; TEXT-ALIGN: center" height=553 alt="新建 Open Office 绘图" src="http://img.blog.163.com/photo/d3iFfy8PNXbQX2rfGXn6Ug==/1150951179770668408" width=421&gt;&lt;/FONT&gt;&lt;/A&gt; &lt;/P&gt;
&lt;DIV style="TEXT-ALIGN: left"&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如果看懂了这个图，你就明白我们的算法时间复杂度为 &lt;SPAN style="FONT-WEIGHT: bold; FONT-STYLE: italic"&gt;O(logn)&lt;/SPAN&gt;。至于空间复杂度，如果题目不要求你求出具体操作步骤，而只要你告诉他最少需要多少步，那么仅需两个额外空间，故空间复杂度为 &lt;SPAN style="FONT-WEIGHT: bold; FONT-STYLE: italic"&gt;O(1)&lt;/SPAN&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;&lt;/SPAN&gt;；如果要求出具体操作步骤呢？也简单，记录上图中这样的序列，反推回去，即可，这样时间/空间复杂度皆为 &lt;SPAN style="FONT-WEIGHT: bold; FONT-STYLE: italic"&gt;O(logn)&lt;/SPAN&gt;。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 大道至简。完。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-WEIGHT: bold; FONT-STYLE: italic"&gt;&lt;SPAN style="FONT-WEIGHT: normal; TEXT-DECORATION: underline"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="FONT-WEIGHT: bold; FONT-STYLE: italic"&gt;&lt;SPAN style="FONT-WEIGHT: normal; TEXT-DECORATION: underline"&gt;注：此算法部分受 &lt;/SPAN&gt;&lt;A style="FONT-WEIGHT: normal; TEXT-DECORATION: underline" href="http://zhiqiang.org/blog/posts/complexity-of-recursive-algorithm.html" target=_blank&gt;&lt;FONT color=#006600&gt;这篇文章&lt;/FONT&gt;&lt;/A&gt;&lt;SPAN style="FONT-WEIGHT: normal"&gt;&lt;SPAN style="TEXT-DECORATION: underline"&gt; 的启发。&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description></item><item><dc:creator>xiaoiiiyao</dc:creator><title>[C#] 浅谈C#托管程序中的资源释放问题(ZZ)</title><link>http://computer.mblogger.cn/xiaoiiiyao/posts/90141.aspx</link><pubDate>Mon, 03 Nov 2008 11:19:00 GMT</pubDate><guid>http://computer.mblogger.cn/xiaoiiiyao/posts/90141.aspx</guid><wfw:comment>http://computer.mblogger.cn/xiaoiiiyao/comments/90141.aspx</wfw:comment><comments>http://computer.mblogger.cn/xiaoiiiyao/posts/90141.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://computer.mblogger.cn/xiaoiiiyao/comments/commentRss/90141.aspx</wfw:commentRss><trackback:ping>http://computer.mblogger.cn/xiaoiiiyao/trackback.aspx?ID=90141</trackback:ping><description>&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;终于开始动手写这篇文章了，有个网友催了我好几次，今天终于可以静下心来完成它。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;?XML:NAMESPACE PREFIX = O /&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;便于对文章的开展，需要先明确两个概念。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;第一个就是很多人用&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;.Net&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;写程序，会谈到托管这个概念。那么&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;.Net&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;所指的资源托管到底是什么意思，是相对于所有资源，还是只限于某一方面资源？很多人对此不是很了解，&lt;STRONG&gt;&lt;SPAN style="COLOR: red"&gt;其实&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;.Net&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;所指的托管只是针对内存这一个方面，并不是对于所有的资源；因此对于&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;Stream&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;，数据库的连接，&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;GDI+&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;的相关对象，还有&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;Com&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;对象等等，这些资源并不是受到&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;.Net&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;管理而统称为非托管资源。而对于内存的释放和回收，系统提供了&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;GC-Garbage Collector&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;，而至于其他资源则需要手动进行释放。&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;那么第二个概念就是什么是垃圾，通过我以前的文章，会了解到&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;.Net&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;类型分为两大类，一个就是值类型，另一个就是引用类型。前者是分配在栈上，并不需要&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;GC&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;回收；后者是分配在堆上，因此它的内存释放和回收需要通过&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;GC&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;来完成。&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;GC&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;的全称为&amp;#8220;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Garbage Collector&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;&amp;#8221;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;,&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;顾名思义就是垃圾回收器，那么只有被称为垃圾的对象才能被&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;GC&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;回收。也就是说，&lt;STRONG&gt;&lt;SPAN style="COLOR: red"&gt;一个引用类型对象所占用的内存需要被&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;GC&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;回收，需要先成为垃圾。那么&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;.Net&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;如何判定一个引用类型对象是垃圾呢，&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;.Net&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;的判断很简单，只要判定此对象或者其包含的子对象没有任何引用是有效的，那么系统就认为它是垃圾。&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;明确了这两个基本概念，接下来说说&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;GC&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;的运作方式以及其的功能。内存的释放和回收需要伴随着程序的运行，因此系统为&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;GC&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;安排了独立的线程。那么&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;GC&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;的工作大致是，查询内存中对象是否成为垃圾，然后对垃圾进行释放和回收。那么对于&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;GC&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;对于内存回收采取了一定的优先算法进行轮循回收内存资源。其次，&lt;STRONG&gt;&lt;SPAN style="COLOR: red"&gt;对于内存中的垃圾分为两种，一种是需要调用对象的析构函数，另一种是不需要调用的。&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;GC&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;对于前者的回收需要通过两步完成，第一步是调用对象的析构函数，第二步是回收内存，但是要注意这两步不是在&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;GC&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;一次轮循完成，即需要两次轮循；相对于后者，则只是回收内存而已。&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;很明显得知，对于某个具体的资源，无法确切知道，对象析构函数什么时候被调用，以及&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;GC&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;什么时候会去释放和回收它所占用的内存。那么对于从&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;C&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;、&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;C++&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;之类语言转换过来的程序员来说，这里需要转变观念。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;那么对于程序资源来说，我们应该做些什么，以及如何去做，才能使程序效率最高，同时占用资源能尽快的释放。前面也说了，资源分为两种，托管的内存资源，这是不需要我们操心的，系统已经为我们进行管理了；那么对于非托管的资源，这里再重申一下，就是&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Stream&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;，数据库的连接，&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;GDI+&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;的相关对象，还有&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Com&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;对象等等这些资源，需要我们手动去释放。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;如何去释放，应该把这些操作放到哪里比较好呢。&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;.Net&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;提供了三种方法，也是最常见的三种，大致如下：&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"&gt;&amp;lt;!--[if !supportLists]--&amp;gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN&gt;1．&lt;SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;!--[endif]--&amp;gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;析构函数；&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"&gt;&amp;lt;!--[if !supportLists]--&amp;gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN&gt;2．&lt;SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;!--[endif]--&amp;gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;继承&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;IDisposable&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;接口，实现&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Dispose&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;方法；&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"&gt;&amp;lt;!--[if !supportLists]--&amp;gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN&gt;3．&lt;SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;!--[endif]--&amp;gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;提供&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Close&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;方法。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: navy; FONT-FAMILY: 宋体"&gt;经过前面的介绍，可以知道析构函数只能被&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: navy"&gt;GC&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: navy; FONT-FAMILY: 宋体"&gt;来调用的，那么无法确定它什么时候被调用，因此用它作为资源的释放并不是很合理，因为资源释放不及时；但是为了防止资源泄漏，毕竟它会被&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: navy"&gt;GC&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: navy; FONT-FAMILY: 宋体"&gt;调用，因此析构函数可以作为一个补救方法。而&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: navy"&gt;Close&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: navy; FONT-FAMILY: 宋体"&gt;与&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: navy"&gt;Dispose&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: navy; FONT-FAMILY: 宋体"&gt;这两种方法的区别在于，调用完了对象的&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: navy"&gt;Close&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: navy; FONT-FAMILY: 宋体"&gt;方法后，此对象有可能被重新进行使用；而&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: navy"&gt;Dispose&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: navy; FONT-FAMILY: 宋体"&gt;方法来说，此对象所占有的资源需要被标记为无用了，也就是此对象被销毁了，不能再被使用。&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;例如，常见&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;SqlConnection&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;这个类，当调用完&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Close&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;方法后，可以通过&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Open&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;重新打开数据库连接，当彻底不用这个对象了就可以调用&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Dispose&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;方法来标记此对象无用，等待&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;GC&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;回收。明白了这两种方法的意思后，大家在往自己的类中添加的接口时候，不要歪曲了这两者意思。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;接下来说说这三个函数的调用时机，我用几个试验结果来进行说明，可能会使大家的印象更深。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;首先是这三种方法的实现，大致如下：&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt; The class to show three disposal function&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; DisposeClass:IDisposable&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; Close()&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Debug.WriteLine( "Close called!" );&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;~DisposeClass()&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Debug.WriteLine( "Destructor called!" );&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;#region&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt; IDisposable Members&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; Dispose()&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// TODO:&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;Add DisposeClass.Dispose implementation&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Debug.WriteLine( "Dispose called!" );&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;#endregion&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;对于&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Close&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;来说不属于真正意义上的释放，除了注意它需要显示被调用外，我在此对它不多说了。而对于析构函数而言，不是在对象离开作用域后立刻被执行，只有在关闭进程或者调用&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;GC.Collect&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;方法的时候才被调用，参看如下的代码运行结果。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; Create()&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;DisposeClass myClass = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; DisposeClass();&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; CallGC()&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;GC.Collect();&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Show destructor&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Create();&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Debug.WriteLine( "After created!" );&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;CallGC();&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;运行的结果为：&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt; TEXT-ALIGN: left" align=left&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: 新宋体"&gt;After created!&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: 新宋体"&gt;Destructor called!&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: lime"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;显然在出了&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;Create&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;函数外，&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;myClass&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;对象的析构函数没有被立刻调用，而是等显示调用&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;GC.Collect&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;才被调用。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;对于&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Dispose&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;来说，也需要显示的调用，但是对于继承了&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;IDisposable&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;的类型对象可以使用&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;using&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;这个关键字，这样对象的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Dispose&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;方法在出了&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;using&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;范围后会被自动调用。例如：&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;( DisposeClass myClass = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; DisposeClass() )&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;//other operation here&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;如上运行的结果如下：&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: 新宋体"&gt;Dispose called!&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: navy"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;那么对于如上&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;DisposeClass&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;类型的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Dispose&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;实现来说，事实上&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;GC&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;还需要调用对象的析构函数，&lt;STRONG&gt;&lt;SPAN style="COLOR: red"&gt;按照前面的&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;GC&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;流程来说，&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;GC&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;对于需要调用析构函数的对象来说，至少经过两个步骤，即首先调用对象的析构函数，其次回收内存。也就是说，按照上面所写的&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;Dispose&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;函数，虽说被执行了，但是&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;GC&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;还是需要执行析构函数，那么一个完整的&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;Dispose&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;函数，应该通过调用&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;GC.SuppressFinalize(this )&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;来告诉&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;GC&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;，让它不用再调用对象的析构函数中。&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;那么改写后的&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;DisposeClass&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;如下：&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt; The class to show three disposal function&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; DisposeClass:IDisposable&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; Close()&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Debug.WriteLine( "Close called!" );&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;~DisposeClass()&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Debug.WriteLine( "Destructor called!" );&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;#region&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt; IDisposable Members&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; Dispose()&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// TODO:&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;Add DisposeClass.Dispose implementation&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Debug.WriteLine( "Dispose called!" );&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;GC.SuppressFinalize( &lt;SPAN style="COLOR: blue"&gt;this&lt;/SPAN&gt; );&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;#endregion&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;通过如下的代码进行测试。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; Run()&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;( DisposeClass myClass = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; DisposeClass() )&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;//other operation here&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; CallGC()&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;GC.Collect();&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Show destructor&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Run();&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Debug.WriteLine( "After Run!" );&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;CallGC();&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;运行的结果如下：&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 24.1pt; TEXT-ALIGN: left" align=left&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: 新宋体"&gt;Dispose called!&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 24.1pt; TEXT-ALIGN: left" align=left&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: 新宋体"&gt;After Run!&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;显然对象的析构函数没有被调用。通过如上的实验以及文字说明，大家会得到如下的一个对比表格。&lt;/SPAN&gt;&lt;/P&gt;
&lt;TABLE class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 59.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=79&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 117pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" width=156&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: rgb(153,51,0); FONT-FAMILY: 宋体"&gt;析构函数&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: rgb(153,51,0)"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 143.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" width=191&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US style="COLOR: rgb(153,51,0)"&gt;Dispose&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: rgb(153,51,0); FONT-FAMILY: 宋体"&gt;方法&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: rgb(153,51,0)"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 106.55pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" width=142&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US style="COLOR: rgb(153,51,0)"&gt;Close&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: rgb(153,51,0); FONT-FAMILY: 宋体"&gt;方法&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: rgb(153,51,0)"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: 1pt solid; WIDTH: 59.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" width=79&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: blue; FONT-FAMILY: 宋体"&gt;意义&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: blue"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 117pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=156&gt;
&lt;P class=MsoNormal&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: navy; FONT-FAMILY: 宋体"&gt;销毁对象&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: navy"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 143.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=191&gt;
&lt;P class=MsoNormal&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: navy; FONT-FAMILY: 宋体"&gt;销毁对象&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: navy"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 106.55pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=142&gt;
&lt;P class=MsoNormal&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: maroon; FONT-FAMILY: 宋体"&gt;关闭对象资源&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: maroon"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: 1pt solid; WIDTH: 59.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" width=79&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: blue; FONT-FAMILY: 宋体"&gt;调用方式&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: blue"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 117pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=156&gt;
&lt;P class=MsoNormal&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;不能被显示调用，会被&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;GC&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;调用&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 143.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=191&gt;
&lt;P class=MsoNormal&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: navy; FONT-FAMILY: 宋体"&gt;需要显示调用&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: navy"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: navy; FONT-FAMILY: 宋体"&gt;或者通过&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: navy"&gt;using&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: navy; FONT-FAMILY: 宋体"&gt;语句&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;EM&gt;&lt;SPAN lang=EN-US style="COLOR: rgb(255,204,0)"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 106.55pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=142&gt;
&lt;P class=MsoNormal&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: navy; FONT-FAMILY: 宋体"&gt;需要显示调用&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: navy"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: 1pt solid; WIDTH: 59.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" width=79&gt;
&lt;P class=MsoNormal style="TEXT-ALIGN: center" align=center&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: blue; FONT-FAMILY: 宋体"&gt;调用时机&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: blue"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 117pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=156&gt;
&lt;P class=MsoNormal&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: red; FONT-FAMILY: 宋体"&gt;不确定&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 143.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=191&gt;
&lt;P class=MsoNormal&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: rgb(0,51,0); FONT-FAMILY: 宋体"&gt;确定，在显示调用或者离开&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: rgb(0,51,0)"&gt;using&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: rgb(0,51,0); FONT-FAMILY: 宋体"&gt;程序块&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: rgb(0,51,0)"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 106.55pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=142&gt;
&lt;P class=MsoNormal&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: rgb(0,51,0); FONT-FAMILY: 宋体"&gt;确定，在显示调用时&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: rgb(0,51,0)"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;那么在定义一个类型的时候，是否一定要给出这三个函数地实现呢。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: blue; FONT-FAMILY: 宋体"&gt;我的建议大致如下。&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: blue"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"&gt;&amp;lt;!--[if !supportLists]--&amp;gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US style="COLOR: blue"&gt;&lt;SPAN&gt;1．&lt;SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&amp;lt;!--[endif]--&amp;gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: blue; FONT-FAMILY: 宋体"&gt;提供析构函数，避免资源未被释放，主要是指非内存资源；&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: blue"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"&gt;&amp;lt;!--[if !supportLists]--&amp;gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US style="COLOR: blue"&gt;&lt;SPAN&gt;2．&lt;SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&amp;lt;!--[endif]--&amp;gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: blue; FONT-FAMILY: 宋体"&gt;对于&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: blue"&gt;Dispose&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: blue; FONT-FAMILY: 宋体"&gt;和&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: blue"&gt;Close&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: blue; FONT-FAMILY: 宋体"&gt;方法来说，需要看所定义的类型所使用的资源（参看前面所说），而决定是否去定义这两个函数；&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: blue"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"&gt;&amp;lt;!--[if !supportLists]--&amp;gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US style="COLOR: blue"&gt;&lt;SPAN&gt;3．&lt;SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&amp;lt;!--[endif]--&amp;gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: blue; FONT-FAMILY: 宋体"&gt;在实现&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: blue"&gt;Dispose&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: blue; FONT-FAMILY: 宋体"&gt;方法的时候，一定要加上&amp;#8220;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 新宋体"&gt;GC.SuppressFinalize( this )&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: blue; FONT-FAMILY: 宋体"&gt;&amp;#8221;语句，避免再让&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: blue"&gt;GC&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: blue; FONT-FAMILY: 宋体"&gt;调用对象的析构函数。&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: blue"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=EN-US style="COLOR: blue"&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="TEXT-INDENT: 21pt"&gt;&lt;SPAN lang=EN-US&gt;C#&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体"&gt;程序所使用的内存是受托管的，但不意味着滥用，好地编程习惯有利于提高代码的质量以及程序的运行效率。&lt;/SPAN&gt;&lt;/P&gt;</description></item><item><dc:creator>xiaoiiiyao</dc:creator><title>[C++]C++的四种cast操作符的区别--类型转换(ZZ)</title><link>http://computer.mblogger.cn/xiaoiiiyao/posts/90111.aspx</link><pubDate>Sun, 02 Nov 2008 00:12:00 GMT</pubDate><guid>http://computer.mblogger.cn/xiaoiiiyao/posts/90111.aspx</guid><wfw:comment>http://computer.mblogger.cn/xiaoiiiyao/comments/90111.aspx</wfw:comment><comments>http://computer.mblogger.cn/xiaoiiiyao/posts/90111.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://computer.mblogger.cn/xiaoiiiyao/comments/commentRss/90111.aspx</wfw:commentRss><trackback:ping>http://computer.mblogger.cn/xiaoiiiyao/trackback.aspx?ID=90111</trackback:ping><description>&lt;H2&gt;&amp;nbsp;&lt;/H2&gt;
&lt;DIV class=postbody&gt;C++的四种cast操作符的区别&lt;BR&gt;发信站: 水木社区 (Thu Jan 26 21:15:16 2006), 站内&lt;BR&gt;&lt;BR&gt;声明 by NetMD：&lt;BR&gt;并非我的原创，来自互联网，且是两篇帖子的合集，个人觉得这样才比较完备&lt;BR&gt;&lt;BR&gt;----------------------------------------------------------------------&lt;BR&gt;&lt;BR&gt;Q:什么是C风格转换？什么是static_cast, dynamic_cast 以及 reinterpret_cast？区别是什么？为什么要注意？&lt;BR&gt;&lt;BR&gt;A:转换的含义是通过改变一个变量的类型为别的类型从而改变该变量的表示方式。为了类型转换一个简单对象为另一个对象你会使用传统的类型转换操作符。比如，为了转换一个类型为doubole的浮点数的指针到整型：&lt;BR&gt;代码:&lt;BR&gt;int i;&lt;BR&gt;double d;&lt;BR&gt;&lt;BR&gt;i = (int) d;&lt;BR&gt;或者：&lt;BR&gt;&lt;BR&gt;i = int (d);&lt;BR&gt;&lt;BR&gt;对于具有标准定义转换的简单类型而言工作的很好。然而，这样的转换符也能不分皂白的应用于类（class）和类的指针。ANSI-C++标准定义了四个新的转换符：'reinterpret_cast', 'static_cast', 'dynamic_cast' 和 'const_cast'，目的在于控制类(class)之间的类型转换。&lt;BR&gt;代码:&lt;BR&gt;reinterpret_cast&amp;lt;new_type&amp;gt;(expression)&lt;BR&gt;dynamic_cast&amp;lt;new_type&amp;gt;(expression)&lt;BR&gt;static_cast&amp;lt;new_type&amp;gt;(expression)&lt;BR&gt;const_cast&amp;lt;new_type&amp;gt;(expression)&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;1 reinterpret_cast&lt;BR&gt;&lt;BR&gt;'reinterpret_cast'转换一个指针为其它类型的指针。它也允许从一个指针转换为整数类型。反之亦然。（译注：是指针具体的地址值作为整数值？）&lt;BR&gt;这个操作符能够在非相关的类型之间转换。操作结果只是简单的从一个指针到别的指针的值的二进制拷贝。在类型之间指向的内容不做任何类型的检查和转换。&lt;BR&gt;&lt;BR&gt;如果情况是从一个指针到整型的拷贝，内容的解释是系统相关的，所以任何的实现都不是方便的。一个转换到足够大的整型能够包含它的指针是能够转换回有效的指针的。&lt;BR&gt;&lt;BR&gt;代码:&lt;BR&gt;class A {};&lt;BR&gt;class B {};&lt;BR&gt;&lt;BR&gt;A * a = new A;&lt;BR&gt;B * b = reinterpret_cast&amp;lt;B *&amp;gt;(a);&lt;BR&gt;'reinterpret_cast'就像传统的类型转换一样对待所有指针的类型转换。&lt;BR&gt;&lt;BR&gt;2 static_cast&lt;BR&gt;&lt;BR&gt;'static_cast'允许执行任意的隐式转换和相反转换动作。（即使它是不允许隐式的）&lt;BR&gt;&lt;BR&gt;应用到类的指针上，意思是说它允许子类类型的指针转换为父类类型的指针（这是一个有效的隐式转换），同时，也能够执行相反动作：转换父类为它的子类。&lt;BR&gt;&lt;BR&gt;在这最后例子里，被转换的父类没有被检查是否与目的类型相一致。&lt;BR&gt;代码：&lt;BR&gt;class Base {};&lt;BR&gt;class Derived : public Base {};&lt;BR&gt;&lt;BR&gt;Base *a &amp;nbsp; &amp;nbsp;= new Base;&lt;BR&gt;Derived *b = static_cast&amp;lt;Derived *&amp;gt;(a);&lt;BR&gt;'static_cast'除了操作类型指针，也能用于执行类型定义的显式的转换，以及基础类型之间的标准转换:&lt;BR&gt;&lt;BR&gt;代码:&lt;BR&gt;double d = 3.14159265;&lt;BR&gt;int &amp;nbsp; &amp;nbsp;i = static_cast&amp;lt;int&amp;gt;(d);&lt;BR&gt;&lt;BR&gt;3 dynamic_cast&lt;BR&gt;&lt;BR&gt;'dynamic_cast'只用于对象的指针和引用。当用于多态类型时，它允许任意的隐式类型转换以及相反过程。不过，与static_cast不同，在后一种情况里（注：即隐式转换的相反过程），dynamic_cast会检查操作是否有效。也就是说，它会检查转换是否会返回一个被请求的有效的完整对象。&lt;BR&gt;检测在运行时进行。如果被转换的指针不是一个被请求的有效完整的对象指针，返回值为NULL.&lt;BR&gt;代码：&lt;BR&gt;class Base { virtual dummy() {} };&lt;BR&gt;class Derived : public Base {};&lt;BR&gt;&lt;BR&gt;Base* b1 = new Derived;&lt;BR&gt;Base* b2 = new Base;&lt;BR&gt;&lt;BR&gt;Derived* d1 = dynamic_cast&amp;lt;Derived *&amp;gt;(b1); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// succeeds&lt;BR&gt;Derived* d2 = dynamic_cast&amp;lt;Derived *&amp;gt;(b2); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// fails: returns 'NULL'&lt;BR&gt;&lt;BR&gt;如果一个引用类型执行了类型转换并且这个转换是不可能的，一个bad_cast的异常类型被抛出：&lt;BR&gt;代码:&lt;BR&gt;class Base { virtual dummy() {} };&lt;BR&gt;class Derived : public Base { };&lt;BR&gt;&lt;BR&gt;Base* b1 = new Derived;&lt;BR&gt;Base* b2 = new Base;&lt;BR&gt;&lt;BR&gt;Derived d1 = dynamic_cast&amp;lt;Derived &amp;amp;*&amp;gt;(b1); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// succeeds&lt;BR&gt;Derived d2 = dynamic_cast&amp;lt;Derived &amp;amp;*&amp;gt;(b2); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// fails: exception thrown&lt;BR&gt;&lt;BR&gt;4 const_cast&lt;BR&gt;&lt;BR&gt;这个转换类型操纵传递对象的const属性，或者是设置或者是移除：&lt;BR&gt;代码:&lt;BR&gt;class C {};&lt;BR&gt;&lt;BR&gt;const C *a = new C;&lt;BR&gt;&lt;BR&gt;C *b = const_cast&amp;lt;C *&amp;gt;(a);&lt;BR&gt;其它三种操作符是不能修改一个对象的常量性的。&lt;BR&gt;注意：'const_cast'也能改变一个类型的volatile qualifier。&lt;BR&gt;&lt;BR&gt;--------------------------------------------------------------------&lt;BR&gt;&lt;BR&gt;C++的4种类型转换&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;一、C 风格（C-style）强制转型如下：&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;(T) expression // cast expression to be of type T &lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;函数风格（Function-style）强制转型使用这样的语法：&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;T(expression) // cast expression to be of type T &lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;这两种形式之间没有本质上的不同，它纯粹就是一个把括号放在哪的问题。我把这两种形式称为旧风格（old-style）的强制转型。 &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; 二、 C++的四种强制转型形式：&lt;BR&gt;&lt;BR&gt;　　C++ 同时提供了四种新的强制转型形式（通常称为新风格的或 C++ 风格的强制转型）： &lt;BR&gt;　　const_cast(expression) &lt;BR&gt;　　dynamic_cast(expression) &lt;BR&gt;　　reinterpret_cast(expression) &lt;BR&gt;　　static_cast(expression) &lt;BR&gt;&lt;BR&gt;　　每一种适用于特定的目的： &lt;BR&gt;&lt;BR&gt;　　&amp;#183;dynamic_cast 主要用于执行&amp;#8220;安全的向下转型（safe downcasting）&amp;#8221;，也就是说，要确定一个对象是否是一个继承体系中的一个特定类型。它是唯一不能用旧风格语法执行的强制转型，也是唯一可能有重大运行时代价的强制转型。&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;#183;static_cast 可以被用于强制隐型转换（例如，non-const 对象转型为 const 对象，int 转型为 double，等等），它还可以用于很多这样的转换的反向转换（例如，void* 指针转型为有类型指针，基类指针转型为派生类指针），但是它不能将一个 const 对象转型为 non-const 对象（只有 const_cast 能做到），它最接近于C-style的转换。&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR&gt;　　&amp;#183;const_cast 一般用于强制消除对象的常量性。它是唯一能做到这一点的 C++ 风格的强制转型。 &lt;BR&gt;&lt;BR&gt;　　&amp;#183;reinterpret_cast 是特意用于底层的强制转型，导致实现依赖（implementation-dependent）（就是说，不可移植）的结果，例如，将一个指针转型为一个整数。这样的强制转型在底层代码以外应该极为罕见。&lt;BR&gt;　　&lt;BR&gt;　　旧风格的强制转型依然合法，但是新的形式更可取。首先，在代码中它们更容易识别（无论是人还是像 grep 这样的工具都是如此），这样就简化了在代码中寻找类型系统被破坏的地方的过程。第二，更精确地指定每一个强制转型的目的，使得编译器诊断使用错误成为可能。例如，如果你试图使用一个 const_cast 以外的新风格强制转型来消除常量性，你的代码将无法编译。 &lt;BR&gt;&lt;BR&gt;== &amp;nbsp;&lt;BR&gt;== &amp;nbsp;dynamic_cast .vs. static_cast &lt;BR&gt;==&lt;BR&gt;&lt;BR&gt;class B { ... };&lt;BR&gt;class D : public B { ... };&lt;BR&gt;&lt;BR&gt;void f(B* pb)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; D* pd1 = dynamic_cast&amp;lt;D*&amp;gt;(pb);&lt;BR&gt;&amp;nbsp;&amp;nbsp; D* pd2 = static_cast&amp;lt;D*&amp;gt;(pb);&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;If pb really points to an object of type D, then pd1 and pd2 will get the same value. They will also get the same value if pb == 0. &lt;BR&gt;&lt;BR&gt;If pb points to an object of type B and not to the complete D class, then dynamic_cast will know enough to return zero. However, static_cast relies on the programmer&amp;#8217;s assertion that pb points to an object of type D and simply returns a pointer to that supposed D object.&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;即dynamic_cast可用于继承体系中的向下转型，即将基类指针转换为派生类指针，比static_cast更严格更安全。dynamic_cast在执行效率上比static_cast要差一些,但static_cast在更宽上范围内可以完成映射,这种不加限制的映射伴随着不安全性.static_cast覆盖的变换类型除类层次的静态导航以外,还包括无映射变换,窄化变换(这种变换会导致对象切片,丢失信息),用VOID*的强制变换,隐式类型变换等...&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;==&lt;BR&gt;== &amp;nbsp;static_cast .vs. reinterpret_cast &lt;BR&gt;==&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;reinterpret_cast是为了映射到一个完全不同类型的意思,这个关键词在我们需要把类型映射回原有类型时用到它.我们映射到的类型仅仅是为了故弄玄虚和其他目的,这是所有映射中最危险的.(这句话是C++编程思想中的原话)&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;static_cast 和 reinterpret_cast 操作符修改了操作数类型. 它们不是互逆的; static_cast 在编译时使用类型信息执行转换, 在转换执行必要的检测(诸如指针越界计算, 类型检查). 其操作数相对是安全的. 另一方面, reinterpret_cast 仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换, 例子如下:&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int n=9; double d=static_cast &amp;lt; double &amp;gt; (n); &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;上面的例子中, 我们将一个变量从 int 转换到 double. 这些类型的二进制表达式是不同的. 要将整数 9 转换到 双精度整数 9, static_cast 需要正确地为双精度整数 d 补足比特位. 其结果为 9.0. 而reinterpret_cast 的行为却不同: &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int n=9;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;double d=reinterpret_cast&amp;lt;double &amp;amp; &amp;gt; (n); &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;这次, 结果有所不同. 在进行计算以后, d 包含无用值. 这是因为 reinterpret_cast 仅仅是复制 n 的比特位到 d, 没有进行必要的分析. &lt;/DIV&gt;
&lt;DIV class=postbody&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class=postbody&gt;转载：&lt;A href="http://welfare.cnblogs.com/articles/336091.html"&gt;http://welfare.cnblogs.com/articles/336091.html&lt;/A&gt;&lt;/DIV&gt;</description></item><item><dc:creator>xiaoiiiyao</dc:creator><title>[Algorithm]反转一个字节和判断32位整数二进制中1的个数的算法(zz)</title><link>http://computer.mblogger.cn/xiaoiiiyao/posts/90093.aspx</link><pubDate>Sat, 01 Nov 2008 16:22:00 GMT</pubDate><guid>http://computer.mblogger.cn/xiaoiiiyao/posts/90093.aspx</guid><wfw:comment>http://computer.mblogger.cn/xiaoiiiyao/comments/90093.aspx</wfw:comment><comments>http://computer.mblogger.cn/xiaoiiiyao/posts/90093.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://computer.mblogger.cn/xiaoiiiyao/comments/commentRss/90093.aspx</wfw:commentRss><trackback:ping>http://computer.mblogger.cn/xiaoiiiyao/trackback.aspx?ID=90093</trackback:ping><description>&lt;TABLE style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word" cellSpacing=0 cellPadding=0 width="100%" border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD align=middle height=25&gt;&lt;FONT style="FONT-SIZE: 14pt" color=#02368d&gt;&lt;B&gt;反转一个字节 和 判断32位整数二进制中1的个数 的算法&lt;/B&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#d2dee2 height=1&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffffff height=1&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD align=middle&gt;
&lt;TABLE style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word" cellSpacing=0 cellPadding=0 width="100%" border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="100%"&gt;
&lt;DIV id=art style="MARGIN: 15px" width="100%"&gt;
&lt;DIV&gt;
&lt;P&gt;&lt;FONT face=宋体 size=3&gt;unsigned&amp;nbsp;char&amp;nbsp;reverse8(&amp;nbsp;unsigned&amp;nbsp;char&amp;nbsp;c&amp;nbsp;)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c&amp;nbsp;=&amp;nbsp;(&amp;nbsp;c&amp;nbsp;&amp;amp;&amp;nbsp;0x55&amp;nbsp;)&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;1&amp;nbsp;|&amp;nbsp;(&amp;nbsp;c&amp;nbsp;&amp;amp;&amp;nbsp;0xAA&amp;nbsp;)&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c&amp;nbsp;=&amp;nbsp;(&amp;nbsp;c&amp;nbsp;&amp;amp;&amp;nbsp;0x33&amp;nbsp;)&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;2&amp;nbsp;|&amp;nbsp;(&amp;nbsp;c&amp;nbsp;&amp;amp;&amp;nbsp;0xCC&amp;nbsp;)&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;2;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c&amp;nbsp;=&amp;nbsp;(&amp;nbsp;c&amp;nbsp;&amp;amp;&amp;nbsp;0x0F&amp;nbsp;)&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;4&amp;nbsp;|&amp;nbsp;(&amp;nbsp;c&amp;nbsp;&amp;amp;&amp;nbsp;0xF0&amp;nbsp;)&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;4;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;c;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;unsigned&amp;nbsp;long&amp;nbsp;func(unsigned&amp;nbsp;long&amp;nbsp;x)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x&amp;nbsp;=&amp;nbsp;(x&amp;nbsp;&amp;amp;&amp;nbsp;0x55555555UL)&amp;nbsp;+&amp;nbsp;((x&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;1)&amp;nbsp;&amp;amp;&amp;nbsp;0x55555555UL);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x&amp;nbsp;=&amp;nbsp;(x&amp;nbsp;&amp;amp;&amp;nbsp;0x33333333UL)&amp;nbsp;+&amp;nbsp;((x&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;2)&amp;nbsp;&amp;amp;&amp;nbsp;0x33333333UL);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x&amp;nbsp;=&amp;nbsp;(x&amp;nbsp;&amp;amp;&amp;nbsp;0x0f0f0f0fUL)&amp;nbsp;+&amp;nbsp;((x&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;4)&amp;nbsp;&amp;amp;&amp;nbsp;0x0f0f0f0fUL);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x&amp;nbsp;=&amp;nbsp;(x&amp;nbsp;&amp;amp;&amp;nbsp;0x00ff00ffUL)&amp;nbsp;+&amp;nbsp;((x&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;8)&amp;nbsp;&amp;amp;&amp;nbsp;0x00ff00ffUL);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x&amp;nbsp;=&amp;nbsp;(x&amp;nbsp;&amp;amp;&amp;nbsp;0x0000ffffUL)&amp;nbsp;+&amp;nbsp;((x&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;16)&amp;nbsp;&amp;amp;&amp;nbsp;0x0000ffffUL);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;x;&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3&gt;先看问题1:&amp;nbsp;反转一个字节。&lt;BR&gt;它的算法是这样的:&amp;nbsp;首先是2位2位为一组，交换前一半和后一半。再4位4位为一组，交换前一半和后一半。再8位为一组，交换前一半和后一半&lt;BR&gt;&lt;BR&gt;。&lt;BR&gt;可能还有点说不清楚。我举个例子。&lt;BR&gt;将1&amp;nbsp;2&amp;nbsp;3&amp;nbsp;4&amp;nbsp;5&amp;nbsp;6&amp;nbsp;7&amp;nbsp;8&amp;nbsp;反转。&lt;BR&gt;(1)2个2个为一组，交换前一半和后一半,&amp;nbsp;变成。&lt;BR&gt;&amp;nbsp;&amp;nbsp;2&amp;nbsp;1&amp;nbsp;4&amp;nbsp;3&amp;nbsp;6&amp;nbsp;5&amp;nbsp;8&amp;nbsp;7&lt;BR&gt;(2)4个4个为一组，交换前一半和后一半，&amp;nbsp;变成&lt;BR&gt;&amp;nbsp;&amp;nbsp;4&amp;nbsp;3&amp;nbsp;2&amp;nbsp;1&amp;nbsp;8&amp;nbsp;7&amp;nbsp;6&amp;nbsp;5&lt;BR&gt;(3)再8个为一组，交换前一半和后一半,&amp;nbsp;变成&lt;BR&gt;&amp;nbsp;&amp;nbsp;8&amp;nbsp;7&amp;nbsp;6&amp;nbsp;5&amp;nbsp;4&amp;nbsp;3&amp;nbsp;2&amp;nbsp;1&lt;BR&gt;反转成功。&lt;BR&gt;这样的算法本来很是简单，很容易用数学归纳法证明其正确。这函数，&amp;nbsp;巧妙就巧妙在作了并行计算，分组，它一次就计算完了。&lt;BR&gt;&lt;BR&gt;先看第一个语句。c&amp;nbsp;=&amp;nbsp;(&amp;nbsp;c&amp;nbsp;&amp;amp;&amp;nbsp;0x55)&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;1&amp;nbsp;|&amp;nbsp;(&amp;nbsp;c&amp;nbsp;&amp;amp;&amp;nbsp;0xAA&amp;nbsp;)&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;1;&amp;nbsp;&lt;BR&gt;0x55其实就是01010101,&amp;nbsp;0xAA就是10101010&lt;BR&gt;假设&amp;nbsp;c=abcdefgh&lt;BR&gt;c&amp;nbsp;&amp;amp;&amp;nbsp;0x55&amp;nbsp;=&amp;nbsp;0b0d0f0h,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c&amp;nbsp;&amp;amp;&amp;nbsp;0xAA&amp;nbsp;=&amp;nbsp;a0c0e0g0&lt;BR&gt;跟着，前者左移一位,&amp;nbsp;b0d0f0h0,&amp;nbsp;后者右移一位,&amp;nbsp;0a0c0e0g,&amp;nbsp;再一个|运算，就两位两位交换了位置。&lt;BR&gt;想象一下，你有一个长纸条，分成一格一格，每格写一个字，假如你将纸条每隔一格剪一个小洞，滑一格，覆盖在原来的纸条上，你就会看到两个两个字交换了位置。&lt;BR&gt;(注:&amp;nbsp;|运算可以换成+运算，想一想为什么)&lt;BR&gt;&lt;BR&gt;第二个语句。&amp;nbsp;c&amp;nbsp;=&amp;nbsp;(&amp;nbsp;c&amp;nbsp;&amp;amp;&amp;nbsp;0x33&amp;nbsp;)&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;2&amp;nbsp;|&amp;nbsp;(&amp;nbsp;c&amp;nbsp;&amp;amp;&amp;nbsp;0xCC&amp;nbsp;)&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;2;&lt;BR&gt;0x33&amp;nbsp;=&amp;nbsp;00110011,&amp;nbsp;0xCC=11001100。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;第三个语句。c&amp;nbsp;=&amp;nbsp;(&amp;nbsp;c&amp;nbsp;&amp;amp;&amp;nbsp;0x0F&amp;nbsp;)&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;4&amp;nbsp;|&amp;nbsp;(&amp;nbsp;c&amp;nbsp;&amp;amp;&amp;nbsp;0xF0&amp;nbsp;)&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;4;&lt;BR&gt;0x0f&amp;nbsp;=&amp;nbsp;00001111,&amp;nbsp;0xF0=11110000.&lt;BR&gt;&lt;BR&gt;这两个语句的作用也是&amp;nbsp;分组，将一半位变成0，移位滑动，跟着再组合，就分组交换了位置。&lt;BR&gt;不防想象两个小纸条剪洞叠加。&lt;BR&gt;&lt;BR&gt;这方法应该可以推广。&lt;BR&gt;理解了问题1，也就很容易理解问题2了.&lt;BR&gt;&lt;BR&gt;问题2:&amp;nbsp;判断32位整数二进制中1的个数。&lt;BR&gt;和问题1一样，也是采用了分组并行计算。&lt;BR&gt;&lt;BR&gt;基本方法是:&amp;nbsp;2位2位为一组，相加，看看有几个1。再4位4位为一组，相加，看看有几个1......&lt;BR&gt;还是说的不太明白。接着分析。&lt;BR&gt;&lt;BR&gt;为了简单说明，先看看8位的情形。相应地，函数里面的语句变成。&lt;BR&gt;x&amp;nbsp;=&amp;nbsp;(x&amp;nbsp;&amp;amp;&amp;nbsp;0x55)&amp;nbsp;+&amp;nbsp;((x&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;1)&amp;nbsp;&amp;amp;&amp;nbsp;0x55);&amp;nbsp;&amp;nbsp;&amp;nbsp;(1)&lt;BR&gt;x&amp;nbsp;=&amp;nbsp;(x&amp;nbsp;&amp;amp;&amp;nbsp;0x33)&amp;nbsp;+&amp;nbsp;((x&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;2)&amp;nbsp;&amp;amp;&amp;nbsp;0x33);&amp;nbsp;&amp;nbsp;&amp;nbsp;(2)&lt;BR&gt;x&amp;nbsp;=&amp;nbsp;(x&amp;nbsp;&amp;amp;&amp;nbsp;0x0f)&amp;nbsp;+&amp;nbsp;((x&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;4)&amp;nbsp;&amp;amp;&amp;nbsp;0x0f);&amp;nbsp;&amp;nbsp;&amp;nbsp;(3)&lt;BR&gt;return&amp;nbsp;x;&lt;BR&gt;&lt;BR&gt;假设x=abcdefgh.&amp;nbsp;0x55=01010101&lt;BR&gt;x&amp;nbsp;&amp;amp;&amp;nbsp;0x55&amp;nbsp;=&amp;nbsp;0b0d0f0h.&amp;nbsp;&amp;nbsp;(x&amp;gt;&amp;gt;1)&amp;nbsp;&amp;amp;&amp;nbsp;0x55&amp;nbsp;=&amp;nbsp;0a0c0e0g。相加。就可以知道2位2位一组1的个数。&lt;BR&gt;&lt;BR&gt;比如x=11111111&lt;BR&gt;x=&amp;nbsp;(x&amp;nbsp;&amp;amp;&amp;nbsp;0x55)&amp;nbsp;+&amp;nbsp;((x&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;1)&amp;nbsp;&amp;amp;&amp;nbsp;0x55);&amp;nbsp;之后x=10101010。你2位2位地看，10=2,&amp;nbsp;就是2&amp;nbsp;2&amp;nbsp;2&amp;nbsp;2,&amp;nbsp;就是说各组都是2个1。&lt;BR&gt;比如x=00101001&lt;BR&gt;x=&amp;nbsp;(x&amp;nbsp;&amp;amp;&amp;nbsp;0x55)&amp;nbsp;+&amp;nbsp;((x&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;1)&amp;nbsp;&amp;amp;&amp;nbsp;0x55);&amp;nbsp;之后x=00010101。你2位2位地看，就是0&amp;nbsp;1&amp;nbsp;1&amp;nbsp;1,&amp;nbsp;前1组只有0个1，后面的组都是1个1。&lt;BR&gt;&lt;BR&gt;好啦。再来看。0x33=00110011。&lt;BR&gt;x=abcdefgh.&amp;nbsp;&lt;BR&gt;x=(x&amp;nbsp;&amp;amp;&amp;nbsp;0x33)+((x&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;2)&amp;amp;0x33);&amp;nbsp;相当于,&amp;nbsp;00ab00ef&amp;nbsp;+&amp;nbsp;00cd00gh。&lt;BR&gt;因为语句(1)之后。ab指示了头两位有多少个1，cd指示了下两位有多少个1。相加00ab+00cd就指示前4位有多少个1。这样就是4位4位为一组。注意这样的分组，组与组之间永远都不会产生进位的。正因为不会产生进位，才可以分开来看。&lt;BR&gt;&lt;BR&gt;好啦。下面的过程都是一样的，不再多说。&lt;BR&gt;8位，16位，32位都一样。&lt;/FONT&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;转自：&lt;A href="http://blog.chinaunix.net/u2/66039/showart_526398.html"&gt;http://blog.chinaunix.net/u2/66039/showart_526398.html&lt;/A&gt;</description></item></channel></rss>