﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-灵魂-放水-随笔分类-读书笔记</title><link>http://www.blogjava.net/zqli/category/8446.html</link><description>为学日益，为道日损。</description><language>zh-cn</language><lastBuildDate>Fri, 21 Sep 2007 12:32:38 GMT</lastBuildDate><pubDate>Fri, 21 Sep 2007 12:32:38 GMT</pubDate><ttl>60</ttl><item><title>原码、反码、补码、移码 </title><link>http://www.blogjava.net/zqli/archive/2007/09/21/147164.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Fri, 21 Sep 2007 09:23:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2007/09/21/147164.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/147164.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2007/09/21/147164.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/147164.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/147164.html</trackback:ping><description><![CDATA[<h2><font size="2">一、原码、反码、补码的定义</font></h2>
<div class="postbody">
<p><strong><font size="2">1、原码的定义</font></strong></p>
<p><font size="2">①小数原码的定义&nbsp;</font></p>
<table cellspacing="0" cellpadding="0" width="376" border="0">
    <tbody>
        <tr>
            <td width="24"><font size="2"></font></td>
            <td width="92" rowspan="2">
            <p align="center"><font size="2"><strong>[X]</strong><sub>原</sub><sub></sub> <strong>=</strong></font></p>
            </td>
            <td width="17" rowspan="2"><font size="2"><img height="47" src="http://www.juntuan.net/d/file/hkbc/winbc/2005-07-10/78e5185dc26d3dc01101be6f3b317131.gif" width="19" border="0"  alt="" /></font></td>
            <td align="center" width="91"><font size="2">X</font></td>
            <td width="146"><font size="2">&nbsp; 0&#8804;X ＜1</font></td>
        </tr>
        <tr>
            <td width="24"><font size="2"></font></td>
            <td align="center" width="91"><font size="2">1－ X</font></td>
            <td width="146"><font size="2">&nbsp;－1 ＜ X &#8804; 0</font></td>
        </tr>
    </tbody>
</table>
<p><font size="2">&nbsp;例如： X=+0.1011 , [X]原= 01011<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; X=－0.1011&nbsp; [X]原= 11011<br />
<br />
②整数原码的定义 </font></p>
<table cellspacing="0" cellpadding="0" width="376" border="0">
    <tbody>
        <tr>
            <td width="24"><font size="2"></font></td>
            <td width="92" rowspan="2">
            <p align="center"><font size="2"><strong>[X]</strong><sub>原</sub> <strong>=</strong></font></p>
            </td>
            <td width="17" rowspan="2"><font size="2"><img height="47" src="http://www.juntuan.net/d/file/hkbc/winbc/2005-07-10/78e5185dc26d3dc01101be6f3b317131.gif" width="19" border="0"  alt="" /></font></td>
            <td align="center" width="91"><font size="2">X</font></td>
            <td width="146"><font size="2">&nbsp; 0&#8804;X ＜2n</font></td>
        </tr>
        <tr>
            <td width="24"><font size="2"></font></td>
            <td align="center" width="91"><font size="2">2<sup>n</sup>－X</font></td>
            <td width="146"><font size="2">&nbsp;－ 2n ＜ X &#8804; 0</font></td>
        </tr>
    </tbody>
</table>
<p><strong><font size="2">2、补码的定义</font></strong></p>
<p><font size="2">①小数补码的定义</font></p>
<table cellspacing="0" cellpadding="0" width="376" border="0">
    <tbody>
        <tr>
            <td width="24"><font size="2"></font></td>
            <td width="92" rowspan="2">
            <p align="center"><font size="2"><strong>[X]</strong><sub>补</sub> <strong>=</strong></font></p>
            </td>
            <td width="17" rowspan="2"><font size="2"><img height="47" src="http://www.juntuan.net/d/file/hkbc/winbc/2005-07-10/78e5185dc26d3dc01101be6f3b317131.gif" width="19" border="0"  alt="" /></font></td>
            <td align="center" width="91"><font size="2">X</font></td>
            <td width="146"><font size="2">&nbsp;&nbsp; 0&#8804;X ＜1</font></td>
        </tr>
        <tr>
            <td width="24"><font size="2"></font></td>
            <td align="center" width="91"><font size="2">2＋ X</font></td>
            <td width="146"><font size="2">&nbsp;&nbsp; －1 &#8804; X ＜ 0</font></td>
        </tr>
    </tbody>
</table>
<p><font size="2">例如：&nbsp; X=+0.1011,&nbsp;&nbsp; [X]<sub>补</sub>= 01011<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; X=－0.1011,&nbsp; [X]<sub>补</sub>= 10101 </font></p>
<p><font size="2">②整数补码的定义&nbsp; </font></p>
<table cellspacing="0" cellpadding="0" width="376" border="0">
    <tbody>
        <tr>
            <td width="24"><font size="2"></font></td>
            <td width="92" rowspan="2">
            <p align="center"><font size="2"><strong>[X]</strong><sub>补</sub> <strong>=</strong></font></p>
            </td>
            <td width="17" rowspan="2"><font size="2"><img height="47" src="http://www.juntuan.net/d/file/hkbc/winbc/2005-07-10/78e5185dc26d3dc01101be6f3b317131.gif" width="19" border="0"  alt="" /></font></td>
            <td align="center" width="91"><font size="2">X</font></td>
            <td width="146"><font size="2">&nbsp;&nbsp;&nbsp; 0&#8804;X ＜2<sup>n</sup></font></td>
        </tr>
        <tr>
            <td width="24"><font size="2"></font></td>
            <td align="center" width="91"><font size="2">2<sup>n+1</sup>＋X</font></td>
            <td width="146"><font size="2">&nbsp;&nbsp; － 2<sup>n</sup> &#8804; X ＜ 0</font></td>
        </tr>
    </tbody>
</table>
<p><font size="2"><br />
</font></p>
<p><strong><font size="2">3、反码的定义</font></strong></p>
<p><font size="2">①小数反码的定义&nbsp;</font></p>
<table cellspacing="0" cellpadding="0" width="376" border="0">
    <tbody>
        <tr>
            <td width="24"><font size="2"></font></td>
            <td width="92" rowspan="2">
            <p align="center"><font size="2"><strong>[X]</strong><sub>反</sub> <strong>=</strong></font></p>
            </td>
            <td width="17" rowspan="2"><font size="2"><img height="47" src="http://www.juntuan.net/d/file/hkbc/winbc/2005-07-10/78e5185dc26d3dc01101be6f3b317131.gif" width="19" border="0"  alt="" /></font></td>
            <td align="center" width="91"><font size="2">X</font></td>
            <td width="146"><font size="2">&nbsp;&nbsp;&nbsp; 0&#8804;X ＜1</font></td>
        </tr>
        <tr>
            <td width="24"><font size="2"></font></td>
            <td align="center" width="91"><font size="2">2－2<sup>n-1</sup>－X</font></td>
            <td width="146"><font size="2">&nbsp;&nbsp; －1 ＜ X &#8804; 0</font></td>
        </tr>
    </tbody>
</table>
<p><font size="2"></font></p>
<p><font size="2">例如：&nbsp;&nbsp; X=+0.1011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [X]<sub>反</sub>= 01011<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; X=－0.1011&nbsp;&nbsp;&nbsp;&nbsp; [X]<sub>反</sub>= 10100 </font></p>
<p><font size="2">②整数反码的定义 </font></p>
<table cellspacing="0" cellpadding="0" width="376" border="0">
    <tbody>
        <tr>
            <td width="24"><font size="2"></font></td>
            <td width="92" rowspan="2">
            <p align="center"><font size="2"><strong>[X]</strong><sub>反</sub> <strong>=</strong></font></p>
            </td>
            <td width="17" rowspan="2"><font size="2"><img height="47" src="http://www.juntuan.net/d/file/hkbc/winbc/2005-07-10/78e5185dc26d3dc01101be6f3b317131.gif" width="19" border="0"  alt="" /></font></td>
            <td align="center" width="91"><font size="2">X</font></td>
            <td width="146"><font size="2">&nbsp;&nbsp;&nbsp; 0&#8804;X ＜2<sup>n</sup></font></td>
        </tr>
        <tr>
            <td width="24"><font size="2"></font></td>
            <td align="center" width="91"><font size="2">2<sup>n+1</sup>－1－X&nbsp;</font></td>
            <td width="146"><font size="2">&nbsp;&nbsp; － 2<sup>n</sup> ＜ X &#8804; 0</font></td>
        </tr>
    </tbody>
</table>
</div>
<p><font size="2"><strong>4.移码：移码只用于表示浮点数的阶码，所以只用于整数。</strong> </font></p>
<p><font size="2">①移码的定义：设由1位符号位和n位数值位组成的阶码，则 [X]<sub>移</sub>=2<sup>n</sup> + X&nbsp;&nbsp;&nbsp;&nbsp; -2<sup>n</sup>&#8804;X &#8804; 2<sup>n</sup><br />
例如： X=＋1011&nbsp;&nbsp;&nbsp;&nbsp; [X]<sub>移</sub>=11011&nbsp;&nbsp;&nbsp;&nbsp; 符号位&#8220;1&#8221;表示正号<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; X=－1011&nbsp;&nbsp;&nbsp;&nbsp; [X]<sub>移</sub>=00101&nbsp;&nbsp;&nbsp;&nbsp; 符号位&#8220;0&#8221;表示负号 </font></p>
<p><font size="2">②移码与补码的关系： [X]移与[X]补的关系是符号位互为反码，<br />
例如： X=＋1011&nbsp;&nbsp;&nbsp;&nbsp; [X]<sub>移</sub>=11011&nbsp;&nbsp;&nbsp;&nbsp; [X]<sub>补</sub>=01011&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; X=－1011&nbsp;&nbsp;&nbsp;&nbsp; [X]<sub>移</sub>=00101&nbsp;&nbsp;&nbsp;&nbsp; [X]<sub>补</sub>=10101&nbsp; </font></p>
<p><font size="2">③移码运算应注意的问题：<br />
◎对移码运算的结果需要加以修正，修正量为2<sup>n</sup> ，即对结果的符号位取反后才是移码形式的正确结果。<br />
◎移码表示中，0有唯一的编码——1000&#8230;00，当出现000&#8230;00时（表示－2<sup>n</sup>），属于浮点数下溢。<br />
<br />
<br />
<br />
</font></p>
<h3><font size="2">二、补码加、减运算规则</font></h3>
<h4><font size="2">1、运算规则</font></h4>
<p style="line-height: 150%"><font size="2">[X＋Y]<sub>补</sub>= [X]<sub>补</sub>＋ [Y]<sub>补</sub><br />
[X－Y]<sub>补</sub>= [X]<sub>补</sub>＋ [－Y]<sub>补</sub></font></p>
<p><font size="2">若已知[Y]<sub>补</sub>，求[－Y]<sub>补</sub>的方法是：将[Y]<sub>补</sub>的各位（包括符号位）逐位取反再在最低位加1即可。<br />
例如：[Y]<sub>补</sub>= 101101 [－Y]<sub>补</sub>= 010011&nbsp;</font></p>
<h4><font size="2">2、溢出判断，一般用双符号位进行判断：</font></h4>
<p style="line-height: 150%"><font size="2">符号位00 表示正数 11 表示负数<br />
结果的符号位为01时，称为上溢；为10时，称为下溢</font></p>
<h5 style="line-height: 150%">例题：设x=0.1101，y=－0.0111，符号位为双符号位<br />
用补码求x+y，x－y&nbsp;<br />
[x]补+[y]补=00 1101+11 1001=00 0110&nbsp;<br />
[x－y]补=[x]补+[－y]补=00 1101+00 0111=01 0100<br />
结果错误，正溢出</h5>
<h3 style="line-height: 150%"><font size="2">三、原码一位乘的实现：</font></h3>
<p style="line-height: 150%"><font size="2">设X=0.1101，Y=－0. 1011，求X*Y<br />
解：符号位单独处理， x<sub>符</sub>＋ y<sub>符</sub><br />
数值部分用原码进行一位乘，如下图所示：<br />
&nbsp;&nbsp;&nbsp;</font></p>
<table cellspacing="0" cellpadding="0" width="532" border="0">
    <tbody>
        <tr>
            <td align="center" width="54"><font size="2"></font></td>
            <td align="center" width="190" bgcolor="#eaeaea"><font size="2">高位部分积</font></td>
            <td align="center" width="117" bgcolor="#eaeaea" colspan="3"><font size="2">&nbsp;低位部分积/乘数</font></td>
            <td align="center" width="155" bgcolor="#eaeaea"><font size="2">说明</font></td>
        </tr>
        <tr>
            <td width="54" rowspan="2"><font size="2"></font></td>
            <td width="190"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 0 0 0 0 0 0&nbsp;&nbsp;</font></td>
            <td width="72"><font size="2">&nbsp;1 0 1 1</font></td>
            <td width="1" bgcolor="#000000" rowspan="18"><font size="2">　</font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2">起始情况</font></td>
        </tr>
        <tr>
            <td width="190"><font size="2">＋） 0 0 1 1 0 1</font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2">乘数最低位为1，+X</font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">
            <hr align="left" width="80%" color="#000000" size="1" />
            </font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2"></font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 0 0 1 1 0 1</font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2"></font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 0 0 0 1 1 0&nbsp;</font></td>
            <td width="72"><font size="2">&nbsp;1 1 0 1</font></td>
            <td width="44"><font size="2">1(丢)</font></td>
            <td width="155"><font size="2">右移部分积和乘数</font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">＋） 0 0 1 1 0 1</font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2">乘数最低位为1，+X</font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">
            <hr align="left" width="80%" color="#000000" size="1" />
            </font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2"></font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 0 1 0 0 1 1&nbsp;</font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2"></font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 0 0 1 0 0 1&nbsp;</font></td>
            <td width="72"><font size="2">&nbsp;1 1 1 0&nbsp;</font></td>
            <td width="44"><font size="2">1(丢)</font></td>
            <td width="155"><font size="2">右移部分积和乘数</font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">＋） 0 0 0 0 0 0</font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2">乘数最低位为0，+0</font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">
            <hr align="left" width="80%" color="#000000" size="1" />
            </font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2"></font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 0 0 1 0 0 1&nbsp;</font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2"></font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 0 0 0 1 0 0&nbsp;</font></td>
            <td width="72"><font size="2">&nbsp;1 1 1 1</font></td>
            <td width="44"><font size="2">0(丢)</font></td>
            <td width="155"><font size="2">右移部分积和乘数</font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">＋） 0 0 1 1 0 1</font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2">乘数最低位为1，+X</font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">
            <hr align="left" width="80%" color="#000000" size="1" />
            </font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2"></font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 0 1 0 0 0 1&nbsp;</font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2"></font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 0 0 1 0 0 0</font></td>
            <td width="72"><font size="2">&nbsp;1 1 1 1</font></td>
            <td width="44"><font size="2">1(丢)</font></td>
            <td width="155"><font size="2">右移部分积和乘数</font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2"></font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2"></font></td>
        </tr>
    </tbody>
</table>
<p style="line-height: 150%"><br />
<strong><font size="2">四、原码一位除的实现：一般用不恢复余数法（加减交替法）</font></strong></p>
<table cellspacing="0" cellpadding="0" width="532" border="0">
    <tbody>
        <tr>
            <td align="center" width="54"><font size="2"></font></td>
            <td align="center" width="190" bgcolor="#eaeaea"><font size="2">部分积</font></td>
            <td align="center" width="117" bgcolor="#eaeaea" colspan="3"><font size="2">低位部分积 附加位</font></td>
            <td align="center" width="155" bgcolor="#eaeaea"><font size="2">操作说明</font></td>
        </tr>
        <tr>
            <td width="54" rowspan="2"><font size="2"></font></td>
            <td width="190"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 0 0 0 0 0 0&nbsp;&nbsp;</font></td>
            <td width="72"><font size="2">&nbsp; 1 0 1 1</font></td>
            <td width="1" bgcolor="#000000" rowspan="18"><font size="2">　</font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2">起始情况</font></td>
        </tr>
        <tr>
            <td width="190"><font size="2">＋） 0 0 0 0 0 0</font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2">乘数最低位为1，+X</font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">
            <hr align="left" width="80%" color="#000000" size="1" />
            </font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2"></font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 0 0 0 0 0 0</font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2"></font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 0 0 0 0 0 0&nbsp;</font></td>
            <td width="72"><font size="2">&nbsp;1 1 0 1</font></td>
            <td width="44"><font size="2">1(丢)</font></td>
            <td width="155"><font size="2">右移部分积和乘数</font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">＋） 1 1 0 0 1 1</font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2">乘数最低位为1，+X</font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">
            <hr align="left" width="80%" color="#000000" size="1" />
            </font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2"></font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 0 1 0 0 1 1&nbsp;</font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2"></font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 0 0 1 0 0 1&nbsp;</font></td>
            <td width="72"><font size="2">&nbsp;1 1 1 0&nbsp;</font></td>
            <td width="44"><font size="2">1(丢)</font></td>
            <td width="155"><font size="2">右移部分积和乘数</font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">＋） 0 0 0 0 0 0</font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2">乘数最低位为0，+0</font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">
            <hr align="left" width="80%" color="#000000" size="1" />
            </font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2"></font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 0 0 1 0 0 1&nbsp;</font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2"></font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 0 0 0 1 0 0&nbsp;</font></td>
            <td width="72"><font size="2">&nbsp;1 1 1 1</font></td>
            <td width="44"><font size="2">0(丢)</font></td>
            <td width="155"><font size="2">右移部分积和乘数</font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">＋） 0 0 1 1 0 1</font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2">乘数最低位为1，+X</font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">
            <hr align="left" width="80%" color="#000000" size="1" />
            </font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2"></font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 0 1 0 0 0 1&nbsp;</font></td>
            <td width="72"><font size="2"></font></td>
            <td width="44"><font size="2"></font></td>
            <td width="155"><font size="2"></font></td>
        </tr>
        <tr>
            <td width="54"><font size="2"></font></td>
            <td width="190"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; 0 0 1 0 0 0</font></td>
            <td width="72"><font size="2">&nbsp;1 1 1 1</font></td>
            <td width="44"><font size="2">1(丢)</font></td>
            <td width="155"><font size="2">右移部分积和乘数</font></td>
        </tr>
    </tbody>
</table>
<br />
<p align="center"><font size="2">&#167;2.5 浮点运算与浮点运算器<br />
</p>
<h3><font size="2">一、浮点数的运算规则</font></h3>
<h4><font size="2">1、浮点加减法的运算步骤</font></h4>
<p><font size="2">设两个浮点数 X=Mx※2Ex Y=My※2Ey<br />
实现X&#177;Y要用如下5步完成：<br />
①对阶操作：小阶向大阶看齐<br />
②进行尾数加减运算<br />
③规格化处理：尾数进行运算的结果必须变成规格化的浮点数，对于双符号位的补码尾数来说，就必须是<br />
001&#215;&#215;&#215;&#8230;&#215;&#215; 或110&#215;&#215;&#215;&#8230;&#215;&#215;的形式<br />
若不符合上述形式要进行左规或右规处理。</font></p>
<p><font size="2">④舍入操作：在执行对阶或右规操作时常用&#8220;0&#8221;舍&#8220;1&#8221;入法将右移出去的尾数数值进行舍入，以确保精度。<br />
⑤判结果的正确性：即检查阶码是否溢出<br />
若阶码下溢（移码表示是00&#8230;0），要置结果为机器0；<br />
若阶码上溢（超过了阶码表示的最大值）置溢出标志。</font></p>
<p><font size="2">例题：假定X=0 .0110011*2<sup>11</sup>，Y=0.1101101*2<sup>-10</sup>（此处的数均为二进制） ?? 计算X+Y；<br />
解：[X]<sub>浮</sub>： 0 1 010 1100110<br />
&nbsp;&nbsp;&nbsp; [Y]<sub>浮</sub>： 0 0 110 1101101<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 符号位 阶码 尾数<br />
<br />
第一步：求阶差： │&#916;E│=|1010-0110|=0100<br />
第二步：对阶：Y的阶码小， Y的尾数右移4位<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Y]<sub>浮</sub>变为 0 1 010 0000110 1101暂时保存&nbsp;<br />
第三步：尾数相加，采用双符号位的补码运算&nbsp;<br />
&nbsp;&nbsp;&nbsp; 00 1100110&nbsp;<br />
&nbsp;&nbsp; +00 0000110&nbsp;<br />
&nbsp;&nbsp;&nbsp; 00 1101100<br />
第四步规格化：满足规格化要求&nbsp;<br />
第五步：舍入处理，采用0舍1入法处理<br />
故最终运算结果的浮点数格式为： 0 1 010 1101101，<br />
即X+Y=+0. 1101101*2<sup>10</sup>&nbsp;</font></p>
<h4><font size="2">2、浮点乘除法的运算步骤</font></h4>
<p><font size="2">①阶码运算：阶码求和（乘法）或阶码求差（除法）<br />
&nbsp;&nbsp;&nbsp; 即&nbsp; [Ex+Ey]移= [Ex]移+ [Ey]补&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Ex－Ey]移= [Ex]移+ [－Ey]补</font></p>
<p><font size="2">②浮点数的尾数处理：浮点数中尾数乘除法运算结果要进行舍入处理<br />
例题：X=0 .0110011*2<sup>11</sup>，Y=0.1101101*2<sup>-10</sup><br />
求X※Y<br />
解：[X]<sub>浮</sub>： 0 1 010 1100110<br />
&nbsp;&nbsp;&nbsp; [Y]<sub>浮</sub>： 0 0 110 1101101<br />
第一步：阶码相加&nbsp;<br />
[Ex+Ey]移=[Ex]移+[Ey]补=1 010+1 110=1 000&nbsp;<br />
1 000为移码表示的0<br />
第二步：原码尾数相乘的结果为：<br />
0 10101101101110<br />
第三步：规格化处理：已满足规格化要求，不需左规，尾数不变，阶码不变。<br />
第四步：舍入处理：按舍入规则，加1进行修正<br />
所以 X※Y= 0.1010111※2<sup>+000</sup> </font></p>
</font>
<img src ="http://www.blogjava.net/zqli/aggbug/147164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2007-09-21 17:23 <a href="http://www.blogjava.net/zqli/archive/2007/09/21/147164.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>进制转换</title><link>http://www.blogjava.net/zqli/archive/2007/09/21/147160.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Fri, 21 Sep 2007 09:21:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2007/09/21/147160.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/147160.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2007/09/21/147160.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/147160.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/147160.html</trackback:ping><description><![CDATA[<div>
<p><strong>1. 二进制数与十进制数之间的转换</strong>
<p><span>⑴二进制数转换成十进制数</span><span lang="EN-US"><span>&nbsp;</span>
<p><span lang="EN-US">[</span><strong><span>例</span></strong><span lang="EN-US">](11111001001)<sub>2</sub>=1</span><span>&#215;</span><span lang="EN-US">2<sup>10</sup>+1</span><span>&#215;</span><span lang="EN-US">2<sup>9</sup>+1</span><span>&#215;</span><span lang="EN-US">2<sup>8</sup>+1</span><span>&#215;</span><span lang="EN-US">2<sup>7</sup>+1</span><span>&#215;</span><span lang="EN-US">2<sup>6</sup>+0</span><span>&#215;</span><span lang="EN-US">2<sup>5</sup>+0</span><span>&#215;</span><span lang="EN-US">2<sup>4</sup></span>
<p><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>+1</span><span>&#215;</span><span lang="EN-US">2<sup>3</sup>+0</span><span>&#215;</span><span lang="EN-US">2<sup>2</sup>+0</span><span>&#215;</span><span lang="EN-US">2<sup>1</sup>+1</span><span>&#215;</span><span lang="EN-US">2<sup>0</sup></span>
<p><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>=(1993)<sub>10</sub></span>
<p><span lang="EN-US">(1011.101)<sub>2</sub>=1</span><span>&#215;</span><span lang="EN-US">2<sup>3</sup>+0</span><span>&#215;</span><span lang="EN-US">2<sup>2</sup>+1</span><span>&#215;</span><span lang="EN-US">2<sup>1</sup>+1</span><span>&#215;</span><span lang="EN-US">2<sup>0</sup>+1</span><span>&#215;</span><span lang="EN-US">2<sup>-1</sup>+0</span><span>&#215;</span><span lang="EN-US">2<sup>-2</sup>+1</span><span>&#215;</span><span lang="EN-US">2<sup>-3</sup>&nbsp;</span><span lang="EN-US"><span>&nbsp;</span>=(11.625)<sub>10</sub></span>
<p><span>⑵十进制数转换成二进制数</span><span lang="EN-US"><span>&nbsp;</span>
<p><span>①十进制整数转换成二进制整数</span><span lang="EN-US">(</span><span>除基</span><span lang="EN-US">(2)</span><span>取余法</span><span lang="EN-US">)</span>
<p><span lang="EN-US">[</span><strong><span>例</span></strong><span lang="EN-US">]</span>
<p><span lang="EN-US">2<span>&nbsp;&nbsp;&nbsp;</span>1993</span>
<p><span lang="EN-US">&nbsp;&nbsp;</span><span lang="EN-US"><span>&nbsp;</span>2<span>&nbsp;&nbsp;&nbsp;</span>996<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">1</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">0</span><span>位</span><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>低位二进制整数</span>
<p><span lang="EN-US">&nbsp;&nbsp;</span><span lang="EN-US">2<span>&nbsp;&nbsp;&nbsp;</span>498<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">0</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">1</span><span>位</span><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;</span>
<p><span lang="EN-US">&nbsp;&nbsp;</span><span lang="EN-US">2<span>&nbsp;&nbsp;&nbsp;</span>249<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">0</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">2</span><span>位</span>
<p><span lang="EN-US">&nbsp;&nbsp;</span><span lang="EN-US"><span lang="EN-US">2<span>&nbsp;&nbsp;&nbsp;</span>124<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">1</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">3</span><span>位</span>
<p><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;</span><span lang="EN-US">2<span>&nbsp;&nbsp;&nbsp;</span>62<span>&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">0</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">4</span><span>位</span>
<p><span lang="EN-US">&nbsp;&nbsp;</span><span lang="EN-US">2<span>&nbsp;&nbsp;&nbsp;</span>31<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">0</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">5</span><span>位</span>
<p><span lang="EN-US">&nbsp;&nbsp;</span><span lang="EN-US">2<span>&nbsp;&nbsp;&nbsp;</span>15<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">1</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">6</span><span>位</span>
<p><span lang="EN-US">&nbsp;&nbsp;</span><span lang="EN-US">2<span>&nbsp;&nbsp;&nbsp;</span>7<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">1</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">7</span><span>位</span>
<p><span lang="EN-US">&nbsp;&nbsp;</span><span lang="EN-US">2<span>&nbsp;&nbsp;&nbsp;</span>3<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">1</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">8</span><span>位</span>
<p><span lang="EN-US">&nbsp;&nbsp;</span><span lang="EN-US">2<span>&nbsp;&nbsp;&nbsp;</span>1<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">1</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">9</span><span>位</span>
<p><span lang="EN-US">&nbsp;&nbsp;</span><span lang="EN-US"><span>&nbsp;</span>0<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">1</span><span>&#8230;&#8230;&#8230;&#8230;</span><span lang="EN-US">10</span><span>位</span><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>高位二进制整数</span>
<p><span>注意</span><span lang="EN-US">,</span><span>除到</span><span lang="EN-US">0</span><span>商时结束</span><span lang="EN-US">2</span><span>除步</span><span lang="EN-US">,</span><span>回写</span><span lang="EN-US">(</span><span>从高位回到低位</span><span lang="EN-US">)</span><span>余数便是所求二进制数</span><span lang="EN-US">,</span><span>即</span><span lang="EN-US">:(1993)<sub>10</sub>=(11111001001)<sub>2</sub></span>
<p><span>②十进制纯小数转换成二进制纯小数</span><span lang="EN-US">(</span><span>乘基</span><span lang="EN-US">(2)</span><span>取整法</span><span lang="EN-US">)</span>
<p><span lang="EN-US">[</span><strong><span>例</span></strong><span lang="EN-US">]</span>
<p><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>0.625</span>
<p><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>2</span>
<p><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>2<sup>-1</sup></span><span>位&#8230;</span><span lang="EN-US"><span>&nbsp;&nbsp;</span>1.<span>&nbsp;&nbsp;</span>250<span>&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>高位二进制小数</span>
<p><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>2</span>
<p><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>2<sup>-2</sup></span><span>位&#8230;</span><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;</span>0.<span>&nbsp;</span>500</span>
<p><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>2</span>
<p><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>2<sup>-3</sup></span><span>位</span><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>1.000<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>低位二进制小数</span>
<p><span>纯小数位被全乘为</span><span lang="EN-US">0</span><span>时</span><span lang="EN-US">,</span><span>得准确二进制纯小数</span><span lang="EN-US">;</span><span>否则</span><span lang="EN-US">(</span><span>纯小数位永远被</span><span lang="EN-US">2</span><span>乘不为全是</span><span lang="EN-US">0)</span><span>只能化成满足某一精确度要求的二进制小数的近似值。例中</span><span lang="EN-US">(0.625)<sub>10</sub>=(0.101)<sub>2</sub></span><span>是准确值</span><span lang="EN-US">,</span><span>其中</span><span lang="EN-US">101</span><span>是顺写的积整位</span><span lang="EN-US">(</span><span>从高位到低位</span><span lang="EN-US">)</span><span>数。</span>
<h4>2. 二进制数与八进制数之间的转换</h4>
<p><span>⑴二进制数转换成八进制数</span><span lang="EN-US">(</span><span>三位分组转换法</span><span lang="EN-US">,</span><span>即合三为一法</span><span lang="EN-US">)<span>&nbsp;</span>
<p><span lang="EN-US">[</span><strong><span>例</span></strong><span lang="EN-US">]</span><span>将二进制数</span><span lang="EN-US">11010001011.11011</span><span>用三位分组转换的方法转换成八进制数。</span>
<p><span>①从小数点起对整数位向左</span><span lang="EN-US">,</span><span>对小数位向右三位分一组</span><span lang="EN-US">,</span><span>不足三位时</span><span lang="EN-US">,</span><span>在最外端加补</span><span lang="EN-US">0</span><span>位</span><span lang="EN-US">,</span><span>使之都成为三位：</span>
<p><span lang="EN-US">(</span><span>填入</span><span lang="EN-US">0</span><span>位</span><span lang="EN-US">)0</span><span>&#8594;</span><span lang="EN-US">011 010 001 011.110 110</span><span>&#8592;</span><span lang="EN-US">0(</span><span>填入</span><span lang="EN-US">0</span><span>位</span><span lang="EN-US">)</span>
<p><span>②将三位一组二进制数分别转换成八进制数</span><span lang="EN-US">,</span><span>并按原位置次序写成新的记数数</span><span lang="EN-US">,</span><span>即得与原数等值的八进制数</span><span lang="EN-US">:3213.66</span>
<p><span>③从而有</span><span lang="EN-US">:(11010001011.11011)<sub>2</sub>=(3213.66)<sub>8</sub></span>
<p><span>所以这样做</span><span lang="EN-US">,</span><span>是因为八进制数的不同数字恰是</span><span lang="EN-US">8</span><span>个三位二进制数。</span>
<p><span>⑵八进制数转换成二进制数</span><span lang="EN-US"><span>&nbsp;</span>
<p><span>将八进制数转换成二进制数时</span><span lang="EN-US">,</span><span>正是上述方法的逆</span><span lang="EN-US">(</span><span>一分为三法</span><span lang="EN-US">)</span><span>。只是注意要在转换成二进制数后</span><span lang="EN-US">,</span><span>将相当于被加补的</span><span lang="EN-US">0</span><span>位上的那些</span><span lang="EN-US">0</span><span>略去</span><span lang="EN-US">,</span><span>这些</span><span lang="EN-US">0</span><span>在二进制记数中是可有可无的</span><span lang="EN-US">,</span><span>它们并不影响记数值。</span>
<p><span lang="EN-US">[</span><strong><span>例</span></strong><span lang="EN-US">](3213.66)<sub>8</sub>=(011 010 001 011.110 110)<sub>2</sub>=(11010001011.11011)<sub>2</sub></span>
<p><span>八进制数与十进制数之间的转换</span><span lang="EN-US">,</span><span>我们至少可以这样做：</span>
<p><span>①通过二进制数作中间过渡</span><span lang="EN-US">,</span><span>将它们互转：</span>
<p><span lang="EN-US">(17)<sub>10</sub>=(10001)<sub>2</sub>=(010 001)<sub>2</sub>=(21)<sub>8</sub></span>
<p><span>②用&#8220;除基</span><span lang="EN-US">(8)</span><span>取余法&#8221;将十进制整数转换成八进制整数</span><span lang="EN-US">,</span><span>用&#8220;乘基</span><span lang="EN-US">(8)</span><span>取整法&#8220;将十进制纯小数转换成八进制纯小数</span><span lang="EN-US">;</span><span>至于将八进制数转换成十进制数</span><span lang="EN-US">,</span><span>只要&#8220;按位乘基幂&#8221;即可：</span>
<p><span lang="EN-US">[</span><strong><span>例</span></strong><span lang="EN-US">]</span><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;</span><span>①由</span><span lang="EN-US"><span>&nbsp;</span>8<span>&nbsp;&nbsp;</span>17<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>②∵</span><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>0.6875</span>
<p><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>8</span>
<p><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>8<span>&nbsp;&nbsp;</span>2</span><span>&#8230;&#8230;</span><span lang="EN-US">1(</span><span>低位</span><span lang="EN-US">)<span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;</span><span>&nbsp;&nbsp;</span>(</span><span>高位</span><span lang="EN-US">)<span>&nbsp;&nbsp;</span>5. 500</span>
<p><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>0<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>8</span>
<p><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&#8230;&#8230;</span><span lang="EN-US">2(</span><span>高位</span><span lang="EN-US">)<span>&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;</span>(</span><span>低位</span><span lang="EN-US">)<span>&nbsp;&nbsp;&nbsp;</span>4.0000</span>
<p><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;</span><span>&nbsp;&nbsp;</span><span>得</span><span lang="EN-US">(17)<sub>10</sub>=(21)<sub>8</sub><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;</span><span>&#8756;</span><span lang="EN-US">(0.6875)<sub>10</sub>=(0.54)<sub>8</sub></span>
<p><span>③于是</span><span lang="EN-US">,(17.6875)<sub>10</sub>=(21.54)<sub>8</sub></span>
<p><span>④而</span><span lang="EN-US">(21.54)<sub>8</sub>=2</span><span>&#215;</span><span lang="EN-US">8<sup>1</sup>+1</span><span>&#215;</span><span lang="EN-US">8<sup>0</sup>+5</span><span>&#215;</span><span lang="EN-US">8<sup>-1</sup>+4</span><span>&#215;</span><span lang="EN-US">8<sup>-2</sup>(</span><span>按位乘基幂</span><span lang="EN-US">)</span>
<p><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;</span>=16+1+5</span><span>&#215;</span><span lang="EN-US">0.125+4</span><span>&#215;</span><span lang="EN-US">0.015625=(17.6875)<sub>10</sub></span>
<h4>3. 二进制数与十六进制数之间的转换</h4>
<p><span>⑴二进制数转换成十六进制数</span><span lang="EN-US">(</span><span>四位分组转换法</span><span lang="EN-US">,</span><span>即合四为一法</span><span lang="EN-US">)<span>&nbsp;</span>
<p><span lang="EN-US">[</span><strong><span>例</span></strong><span lang="EN-US">](101101111100011.110101111)<sub>2</sub>=(0101 1011 1110 0011.1101 0111 1000)<sub>2</sub></span>
<p><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>=(5BE3.D78)<sub>16</sub></span>
<p><span>⑵十六进制数转换成二进制数</span><span lang="EN-US">(</span><span>四位分组转换法的逆方法</span><span lang="EN-US">,</span><span>即一分为四法</span><span lang="EN-US">)<span>&nbsp;</span>
<p><span lang="EN-US">[</span><strong><span>例</span></strong><span lang="EN-US">](5BE3.D78)<sub>16</sub>=(0101 1011 1110 0011.1101 0111 1000)<sub>2</sub></span>
<p><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;&nbsp;</span>=(101101111100011.110101111)<sub>2</sub></span>
<p><span>十六进制数与十进制数之间的转换和八进制数与十进制数之间的转换的方法完全相同</span><span lang="EN-US">,</span><span>对基</span><span lang="EN-US">16</span><span>操作起来也很容易</span><span lang="EN-US">,</span><span>这里就不再赘述了。</span>
<p><span>需要强调的是：计算机能够处理的任何信息</span><span lang="EN-US">,</span><span>其数据形式在计算机内部都以</span><span lang="EN-US">0</span><span>和</span><span lang="EN-US">1</span><span>的方式进行<a onclick="javascript:tagshow(event, '%B4%E6%B4%A2');" href="javascript:;" target="_self"><u><strong>存储</strong></u></a>。任何信息要想存入计算机</span><span lang="EN-US">,</span><span>都必须经过一个转换装置</span><span lang="EN-US">,</span><span>先把计算机要处理的信息转换成仅由</span><span lang="EN-US">0</span><span>和</span><span lang="EN-US">1</span><span>组成的二进制代码之后再存入计算机。要把存储于计算机内的各种信息输出来</span><span lang="EN-US">,</span><span>也必须再经过转换装置把二进制信息转换成人们所熟悉的和常用的符号。这些工作是由计算机自动完成的</span><span lang="EN-US">,</span><span>并不需要用户干预。</span>
<p><span>计算机所能处理和存储的信息是大量的</span><span lang="EN-US">,</span><span>其软件系统要适应发展的需要</span><span lang="EN-US">,</span><span>对表示信息的二进制数码</span><span lang="EN-US">(</span><span>代码</span><span lang="EN-US">)</span><span>必须进行统一的编码</span><span lang="EN-US">,</span><span>以保证计算机的通用性</span><span lang="EN-US">,</span><span>否则就会造成在互换和交流时的混乱。</span>
<p><span>通常</span><span lang="EN-US">,</span><span>将十进制数字、英文字母和一些专用符号等数据都用一定长度的二进制数来表示</span><span lang="EN-US">,</span><span>称作编码</span><span lang="EN-US">;</span><span>用编码表示的数据就称代码。使用计算机时</span><span lang="EN-US">,</span><span>程序、控制命令、数据等在其内部</span><span lang="EN-US">(</span><span>机器级上</span><span lang="EN-US">)</span><span>一律都用代码。现在</span><span lang="EN-US">,</span><span>已有许多种编码方法</span><span lang="EN-US">,</span><span>但被普遍使用的是下述的几种方法。</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
</div>
<img src ="http://www.blogjava.net/zqli/aggbug/147160.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2007-09-21 17:21 <a href="http://www.blogjava.net/zqli/archive/2007/09/21/147160.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]winxp访问win2000</title><link>http://www.blogjava.net/zqli/archive/2007/07/23/131926.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Mon, 23 Jul 2007 10:12:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2007/07/23/131926.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/131926.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2007/07/23/131926.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/131926.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/131926.html</trackback:ping><description><![CDATA[winxp访问win2000容易，默认情况下，在运行里输入: <br>\\abc\D$回车就可以，其中abc是win2000计算机名，D$代表D盘，e$代表E盘。。。。。。 <br>要用win2000里的用户名和密码访问就可以了。 <br><br>win2000要访问winxp，大约要改以下几个地方： <br>1。 打开我的电脑,工具--文件夹选项--查看，里面取消&#8220;使用简单文件（夹）共享&#8221;前面的勾 （是这个意思，具体准确名字忘了）。 <br>2。如果winxp装了sp2补丁，必须要进网上邻居--右键--属性，选择网卡--右键--属性，取消里面的禁止其它计算机访问我的电脑，就是关闭防火墙。没装sp2补丁可能也有这项。 <br>3。在开始--运行里，输入gpedit.msc，进计算机配置--windows设置--安全设置--本地策略--用户权利指派里，删除拒绝从网络访问这台计算机中的所有帐户。 <br>4.在开始--运行里，输入gpedit.msc，进计算机配置--windows设置--安全设置--本地策略--安全选项里，网络访问：可匿名访问的共享逐行添加C$ D$ E$等（代表C、D、E盘）， <br>在网络访问：本地帐户的安全和共享模式里，选经典-。。。。。。这项。 <br>帐户：使用空白密码的本地帐户只允许进行控制台登陆，设为禁用。 <br><br>改了以上的项后，win2000访问winxP的方法和winxp访问win2000的方法相同了。（互访的前提条件是双方通过网线连好，并且IP设置合理才行）。
<img src ="http://www.blogjava.net/zqli/aggbug/131926.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2007-07-23 18:12 <a href="http://www.blogjava.net/zqli/archive/2007/07/23/131926.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]设计模板和母版</title><link>http://www.blogjava.net/zqli/archive/2007/07/19/131241.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Thu, 19 Jul 2007 04:21:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2007/07/19/131241.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/131241.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2007/07/19/131241.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/131241.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/131241.html</trackback:ping><description><![CDATA[<p align=left><strong><span style="COLOR: #ac0000; FONT-FAMILY: 宋体">演示文稿总体格式的设置</span></strong><span style="COLOR: black; FONT-FAMILY: 宋体"> </span></p>
<p align=left><span style="COLOR: black; FONT-FAMILY: 宋体">PowerPoint </span><span style="COLOR: black; FONT-FAMILY: 宋体">的一大特色就是可以使某一演示文稿的多张幻灯片具有一致的格式。设置幻灯片的总体格式有三种方法：母版、配色方案、设计模板。<span></span></span></p>
<p align=left><strong><span style="COLOR: black; FONT-FAMILY: 宋体">母版</span></strong><span style="COLOR: black; FONT-FAMILY: 宋体"></span></p>
<p align=left><span style="COLOR: black; FONT-FAMILY: 宋体">每一份演示文稿都有两种母版，即幻灯片母版和标题母版。幻灯片母版控制所有幻灯片的格式；标题母版控制标题幻灯片的格式和位置，并能控制指定为标题幻灯片的幻灯片，例如某部分的开始。<span></span></span></p>
<p align=left><span style="COLOR: black; FONT-FAMILY: 宋体">母版中包含了设定的幻灯片格式占位符。这些占位符就是母版不同位置的虚线方框，在这些方框中可以设置所有幻灯片中出现的标题、文本、图表、表格、组织结构图、剪贴画及背景等项目。更改幻灯片母版，会影响所有基于母版的演示文稿幻灯片，这种更改也会应用于标题幻灯片中。<span></span></span></p>
<p align=left><span style="COLOR: black; FONT-FAMILY: 宋体">同样道理，更改标题母版的版式，所有标题幻灯片也会随之改变。可以在某一张幻灯片中更改母版设置，例如背景和母版不同或填充颜色不属于母版配色方案。这些特定设置的幻灯片不随母版更改而变化，但随时都可以将母版的设置还原到已改变的幻灯片上。例如，如果幻灯片上有隐藏的背景项，只要单击【格式<span>(O)</span>】菜单上的<span>&#8220;</span>背景<span>&#8221;</span>命令，清除<span>&#8220;</span>忽略母版的背景图形<span>&#8221;</span>复选框，即可显示背景项。<span> </span></span></p>
<p align=left><span style="COLOR: black; FONT-FAMILY: 宋体">幻灯片母版上的标题、文本、日期幻灯片编号和页脚等占位符可以删除。还原被删除的占位符，在幻灯片母版视图中单击【格式<span>(D)</span>】菜单，单击<span>&#8220;</span>母版格式<span>&#8221;</span>命令，单击需要添加项的复选框，单击<span>&#8220;</span>确定<span>&#8221;</span>按钮。只有在幻灯片母版上删除某项占位符后，才能使用相应的复选框。不要在母版上键入文字或插入对象，应该切换到幻灯片或大纲视图后操作。<span></span></span></p>
<p><strong><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">配色方案</span></strong><span style="FONT-SIZE: 10.5pt; COLOR: black"> </span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">配色方案由八种颜色组成，用于演示文稿的主要颜色，例如文本、背景、填充、强调文字所用的颜色。方案中的每种颜色都会自动用于幻灯片上的不同组件。<span></span></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">用模板创建演示文稿时，程序已为每一个模板选择了一种配色方案。演示文稿的配色方案可以更换，单击【格式<span>(D)</span>】菜单，单击<span>&#8220;</span>幻灯片配色方案<span>&#8221;</span>命令，挑选或自定义一种配色方案，用于某张或全部演示文稿。通过这种方式，可以很容易地更改演示文稿的配色方案，并确保新的配色方案和演示文稿中的其他幻灯片相互调和，如想将一张幻灯片的配色方案应用于另一张中，可在幻灯片浏览视图中选择具有所需配色方案的幻灯片，单击<span>&#8220;</span>常用<span>&#8221;</span>工具栏<span>&#8220;</span>格式刷<span>&#8221;</span>键 ，可以重新着色一张幻灯片；双击<span>&#8220;</span>格式刷<span>&#8221;</span>键，依次单击要应用配色方案的一张或者多张幻灯片，可同时重新着色多张幻灯片。<span></span></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">配色方案中除了预设的八种颜色，还有许多其他颜色可供使用。按<span>&#8220;</span>配色方案<span>&#8221;</span>对话框<span>&#8220;</span>自定义<span>&#8221;</span>选项卡中<span>&#8220;</span>更改颜色<span>&#8221;</span>按钮，可使用<span>&#8220;</span>标准<span>&#8221;</span>或<span>&#8220;</span>自定义<span>&#8221;</span>选项卡中的颜色改变幻灯片组件，该颜色会自动添加到各个颜色卡中，所有文本、阴影、项目符号、背景、和线条都能使用该颜色。<span></span></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">添加的颜色将出现在配色方案的八种颜色的下面，最多可以添加和显示八种颜色。如果添加的颜色超过八种，最新的颜色将出现在调色板的第一位，而最旧的颜色被删除。即使更改配色方案，添加到颜色菜单中的颜色仍然保持不变。同样地，以这些颜色着色的文本或对象也不会改变。<span></span></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">如果经常使用一些不属于配色方案内的特定颜色，此功能非常有用。<span></span></span></p>
<p><strong><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">设计模板</span></strong><span style="FONT-SIZE: 10.5pt; COLOR: black"></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">PowerPoint </span><span style="FONT-SIZE: 10.5pt; COLOR: black">提供两种模板：设计模板和内容模板。设计模板包含预定义的格式和配色方案，可以应用到任意演示文稿中创建自定义的外观；内容模板包含的格式和配色方案与设计模板相同，不同的是加上了针对特定主题提供的建议内容。在演示文稿中应用设计模板时，新模板的母版和配色方案将取代原演示文稿的母版和配色方案。应用设计模板之后，不论自动版式是什么，添加的每张新幻灯片都会拥有相同的自定义外观。<span> </span></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">PowerPoint </span><span style="FONT-SIZE: 10.5pt; COLOR: black">提供了各种专业设计的模板，可在新建演示文稿时选用模板；对已建立的演示文稿也可更改模板，单击<span>&#8220;</span>常规任务<span>&#8221;</span>工具栏中的<span>&#8220;</span>应用设计模板<span>&#8221;</span>按钮，在对话框的列表中选择合适的模板。<span></span></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">用户还可以添加自己设计的模板。单击【文件<span>(F)</span>】菜单中的<span>&#8220;</span>另存为<span>&#8221;</span>命令，在<span>&#8220;</span>另存为<span>&#8221;</span>对话框中，将保存位置选择在<span>&#8220;/Microsoft Office/template/</span>演示文稿设计<span>&#8221;</span>文件夹中，<span>&#8220;</span>保存类型<span>&#8221;</span>定为<span>&#8220;</span>演示文稿模板<span>&#8221;</span>，输入模板的<span>&#8220;</span>文件名<span>&#8221;</span>，即可将自己设计的模板保存，并在<span>&#8220;</span>新建演示文稿<span>&#8221;</span>对话框的<span>&#8220;</span>演示文稿设计<span>&#8221;</span>选项卡和<span>&#8220;</span>常规任务<span>&#8221;</span>工具栏中的<span>&#8220;</span>应用设计模板<span>&#8221;</span>按钮激活的对话框中列出。如果其他设置不变，<span>&#8220;</span>另存为<span>&#8221;</span>选择<span>&#8220;</span>演示文稿<span>&#8221;</span>文件夹，则可做为内容模板，在<span>&#8220;</span>新建演示文稿<span>&#8221;</span>对话框的<span>&#8220;</span>演示文稿<span>&#8221;</span>选项卡中列出。<span></span></span></p>
<p><strong><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">配色方案</span></strong><span style="FONT-SIZE: 10.5pt; COLOR: black"> </span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">配色方案由八种颜色组成，用于演示文稿的主要颜色，例如文本、背景、填充、强调文字所用的颜色。方案中的每种颜色都会自动用于幻灯片上的不同组件。<span></span></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">用模板创建演示文稿时，程序已为每一个模板选择了一种配色方案。演示文稿的配色方案可以更换，单击【格式<span>(D)</span>】菜单，单击<span>&#8220;</span>幻灯片配色方案<span>&#8221;</span>命令，挑选或自定义一种配色方案，用于某张或全部演示文稿。通过这种方式，可以很容易地更改演示文稿的配色方案，并确保新的配色方案和演示文稿中的其他幻灯片相互调和，如想将一张幻灯片的配色方案应用于另一张中，可在幻灯片浏览视图中选择具有所需配色方案的幻灯片，单击<span>&#8220;</span>常用<span>&#8221;</span>工具栏<span>&#8220;</span>格式刷<span>&#8221;</span>键 ，可以重新着色一张幻灯片；双击<span>&#8220;</span>格式刷<span>&#8221;</span>键，依次单击要应用配色方案的一张或者多张幻灯片，可同时重新着色多张幻灯片。<span></span></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">配色方案中除了预设的八种颜色，还有许多其他颜色可供使用。按<span>&#8220;</span>配色方案<span>&#8221;</span>对话框<span>&#8220;</span>自定义<span>&#8221;</span>选项卡中<span>&#8220;</span>更改颜色<span>&#8221;</span>按钮，可使用<span>&#8220;</span>标准<span>&#8221;</span>或<span>&#8220;</span>自定义<span>&#8221;</span>选项卡中的颜色改变幻灯片组件，该颜色会自动添加到各个颜色卡中，所有文本、阴影、项目符号、背景、和线条都能使用该颜色。<span></span></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">添加的颜色将出现在配色方案的八种颜色的下面，最多可以添加和显示八种颜色。如果添加的颜色超过八种，最新的颜色将出现在调色板的第一位，而最旧的颜色被删除。即使更改配色方案，添加到颜色菜单中的颜色仍然保持不变。同样地，以这些颜色着色的文本或对象也不会改变。<span></span></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">如果经常使用一些不属于配色方案内的特定颜色，此功能非常有用。<span></span></span></p>
<p><strong><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: 宋体">设计模板</span></strong><span style="FONT-SIZE: 10.5pt; COLOR: black"></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">PowerPoint </span><span style="FONT-SIZE: 10.5pt; COLOR: black">提供两种模板：设计模板和内容模板。设计模板包含预定义的格式和配色方案，可以应用到任意演示文稿中创建自定义的外观；内容模板包含的格式和配色方案与设计模板相同，不同的是加上了针对特定主题提供的建议内容。在演示文稿中应用设计模板时，新模板的母版和配色方案将取代原演示文稿的母版和配色方案。应用设计模板之后，不论自动版式是什么，添加的每张新幻灯片都会拥有相同的自定义外观。<span> </span></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">PowerPoint </span><span style="FONT-SIZE: 10.5pt; COLOR: black">提供了各种专业设计的模板，可在新建演示文稿时选用模板；对已建立的演示文稿也可更改模板，单击<span>&#8220;</span>常规任务<span>&#8221;</span>工具栏中的<span>&#8220;</span>应用设计模板<span>&#8221;</span>按钮，在对话框的列表中选择合适的模板。<span></span></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">用户还可以添加自己设计的模板。单击【文件<span>(F)</span>】菜单中的<span>&#8220;</span>另存为<span>&#8221;</span>命令，在<span>&#8220;</span>另存为<span>&#8221;</span>对话框中，将保存位置选择在<span>&#8220;/Microsoft Office/template/</span>演示文稿设计<span>&#8221;</span>文件夹中，<span>&#8220;</span>保存类型<span>&#8221;</span>定为<span>&#8220;</span>演示文稿模板<span>&#8221;</span>，输入模板的<span>&#8220;</span>文件名<span>&#8221;</span>，即可将自己设计的模板保存，并在<span>&#8220;</span>新建演示文稿<span>&#8221;</span>对话框的<span>&#8220;</span>演示文稿设计<span>&#8221;</span>选项卡和<span>&#8220;</span>常规任务<span>&#8221;</span>工具栏中的<span>&#8220;</span>应用设计模板<span>&#8221;</span>按钮激活的对话框中列出。如果其他设置不变，<span>&#8220;</span>另存为<span>&#8221;</span>选择<span>&#8220;</span>演示文稿<span>&#8221;</span>文件夹，则可做为内容模板，在<span>&#8220;</span>新建演示文稿<span>&#8221;</span>对话框的<span>&#8220;</span>演示文稿<span>&#8221;</span>选项卡中列出。<span></span></span></p>
<p><strong><span style="FONT-SIZE: 10.5pt; COLOR: #ac0000; FONT-FAMILY: 宋体">大纲、备注页和讲义的应用</span></strong><span style="FONT-SIZE: 10.5pt; COLOR: black"> </span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">大纲演示文稿在大纲视图中以大纲形式显示。大纲由每张幻灯片的标题和正文组成。<span></span></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">大纲视图是组织和创建演示文稿内容的理想方式。在<span> PowerPoint </span>中创建大纲，可使用<span>&#8220;</span>内容提示向导<span>&#8221;</span>，或从其他应用程序（如<span> Microsoft Word</span>）导入大纲。<span></span></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">每张幻灯片的标题都会出现在编号和图标的旁边，正文在每个标题的下面。正文的缩进可多达五层。在大纲视图中，可以重新排列幻灯片、移动整张幻灯片、编辑标题和正文。在大纲视图可以看见屏幕上所有的标题和正文，组织内容非常容易。例如，重排幻灯片或项目符号，只要选定要移动的内容，再拖动到新位置即可。切换到大纲视图时，将显示<span>&#8220;</span>大纲<span>&#8221;</span>工具栏，使用其中的工具按钮，可以快速组织演示文稿，如更改项目符号的缩进层次，将项目符号或整张幻灯片在大纲中前后移动，显示或隐藏格式，以及展开或压缩选定幻灯片文本等<span> </span></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">备注页和讲义为了辅助演示，<span>PowerPoint </span>的每张幻灯片都有一个备注页，其中包含幻灯片的缩图及供演讲者备注使用的空间。备注页可以打印，发给观众，在运行演示文稿时作为提示重点。也可以打印每页包含二张、三张、或六张幻灯片的讲义，帮助观众了解演示文稿的内容。<span></span></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">备注和讲义都具有母版，可以在母版上添加要在每页显示的项目。方法是：单击【文件<span>(F)</span>】菜单中的<span>&#8220;</span>打印<span>&#8221;</span>命令，单击<span>&#8220;</span>打印内容<span>&#8221;</span>方框右侧的下拉箭头，如果只需显示幻灯片的内容，选择单击某个<span>&#8220;</span>讲义<span>&#8221;</span>。如果要包括演讲者备注和幻灯片，单击<span>&#8220;</span>备注页<span>&#8221;</span>。如果要在打印内容中包括幻灯片标题和重点，也可以选择<span>&#8220;</span>大纲视图<span>&#8221;</span>。<span></span></span></p>
<p><strong><span style="FONT-SIZE: 10.5pt; COLOR: #ac0000; FONT-FAMILY: 宋体">版式的应用</span></strong><span style="FONT-SIZE: 10.5pt; COLOR: black"></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">创建新的幻灯片，可以单击<span>&#8220;</span>常用<span>&#8221;</span>工具栏的<span>&#8220;</span>新建<span>&#8221;</span>或<span>&#8220;</span>常规任务<span>&#8221;</span>工具栏的<span>&#8220;</span>新幻灯片<span>&#8221;</span>按钮。<span></span></span></p>
<p><span style="FONT-SIZE: 10.5pt; COLOR: black">在<span>&#8220;</span>新幻灯片<span>&#8221;</span>对话框中的<span>24</span>种不同版面设置的自动版式中，根据需要任选一种。例如，有一种版式提供标题、文本及图表的占位符，另一种则提供标题和剪贴画的占位符。标题和文本占位符会采用演示文稿的幻灯片母版格式。可以对占位符执行移动、调整大小或重新设置格式等操作，使它们与幻灯片母版不同。已经创建的幻灯片也可以更改其版式。单击<span>&#8220;</span>常规任务<span>&#8221;</span>工具栏上的<span>&#8220;</span>幻灯片版面设置<span>&#8221;</span>按钮，从中选择一种版式。如果新的版式中没有所需的占位符，例如已经制作了一份图表，但新版式并不提供图表占位符，这时信息也不会丢失。所有已创建的对象仍然存在，但必须重排这些对象使它们配合新的版式。</span></p>
<img src ="http://www.blogjava.net/zqli/aggbug/131241.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2007-07-19 12:21 <a href="http://www.blogjava.net/zqli/archive/2007/07/19/131241.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>“孳息”的概念是什么？孳息包括哪些？</title><link>http://www.blogjava.net/zqli/archive/2007/04/26/113697.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Thu, 26 Apr 2007 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2007/04/26/113697.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/113697.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2007/04/26/113697.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/113697.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/113697.html</trackback:ping><description><![CDATA[指由某一特定物产生的收益。孳息可以分为天然孳息和法定孳息。天然孳息指根据物的自然属性而获得的收益，如树木所结的果实、母畜所生的幼畜等。法定孳息指基于法律关系所获得的收益，如出租人根据租赁合同收取的租金、出借人根据贷款合同取得的利息等。 <br><br>孳息的产生有天然和加工之别。尤其是加工孳息，它是加以人工而获得的孳息，如经播种、灌溉、施肥等而产生的谷物、水果等，它已经包含了占有人的劳动。当加工人是善意占有人时，如果仍坚持原物和孳息一并返还，这对善意占有人很不公平。从更广泛的意义上讲，还会对物的价值的发挥产生负面影响。因为当善意的无权占有人在不能肯定自己是否对物享有权利时，如果不保护他对该物的孳息享有权利，他便不会使该物有更大的收益。因此，无论从保护善意无权占有人利益的角度，还是从社会利益方面考虑，都应该保护善意占有人享有加工孳息的权利。当然法律并不是只保护善意占有人的加工孳息，如果天然孳息当中包含善意占有人的付出，如山中自然生长的树木，无权占有人就树木生长本身并没有加以任何外在人力，但他却一直对该树木尽了照管义务。此时，尽管孳息应随原物一并返还，但应支付善意占有人一定的报酬。当然，这只是从孳息的一种分类来谈对善意占有人的保护问题。再比如，孳息有已分离孳息和未分离孳息，前者如被风雨打下的葡萄，后者如生长在葡萄藤上的葡萄。一般情况下，未分离孳息应该和原物一并返还，此时善意占有人的劳动付出可转化为费用向所有人请求偿还。已分离的孳息如果善意占有人对该孳息的产生付出了劳动的，当然可以享有该孳息的所有权。总之，当物权人行使原物返还请求权时，其孳息的返还与否时应区别对待。恶意占有应是无条件的一并返还，善意占应以保护善意占有人的利益为原则，即如果孳息的产生跟占有人的劳动直接有关，那么该孳息应由善意占有人所有；如果孳息的产生虽与善意占有人无直接关系，但他对孳息的收获等尽了照管等义务的，孳息一般仍归原物所有人享有，但应给善意占有人适当报酬。当孳息与原物不可分时，二者应一并返还给所有人，但善意占有人付出劳动的，所有人应返还给善意占有人孳息的价款或适当的报酬。另外，当孳息是可消费物时并已被善意占有人消费了时，善意占有人不再负返还义务，当然他也不再享有向所有人要求支付劳动费用的权利。</ca>
<img src ="http://www.blogjava.net/zqli/aggbug/113697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2007-04-26 10:23 <a href="http://www.blogjava.net/zqli/archive/2007/04/26/113697.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]什么是ESB，企业服务总线？</title><link>http://www.blogjava.net/zqli/archive/2007/04/06/108866.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Fri, 06 Apr 2007 02:22:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2007/04/06/108866.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/108866.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2007/04/06/108866.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/108866.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/108866.html</trackback:ping><description><![CDATA[<p>CodeHaus发布了ESB的实现Mule 1.0，在SOA被大肆鼓吹的氛围下成长起来的ESB总算揭开了一个面纱！</p>
<p>那么什么是ESB呢？</p>
<p>我们知道SOA体系结构要求企业里面所有的和业务相关的应用程序都应该提供webservice的接口。那么一旦这一步实现了之后，所有的应用程序面临的问题就是如何去调用这些或者说这么多接口，当然使用webservice的客户端采取同步调用的方式当然是可以的。同时如果企业应用有可伸缩性要求，那么也可以采取异步的消息调用机制。而ESB就是采用了消息封装这一思想，把所有对服务的调用都通过统一的消息接口封装起来，无论消息是同步的还是异步的。此外ESB还可以对企业的其他消息服务也提供同样的借口，例如mail,JMS,IBM MQ,MSMQ等等。</p>
<p>ESB可以有那些用 ?</p>
<p>ESB不是万能的,他不是一个应用程序框架,也不是一个企业应用的解决方案.它只是一个基于消息的调用企业服务的通信模块!你可以把它嵌入到你的应用程序框架中,例如嵌入到spring容器里面,或者嵌入到工作流系统中.它的作用是对企业里面的SOA服务的调用提供一个框架和简便的方法.</p>
<p>ESB距离实际的企业应用还有哪些不足?</p>
<p>ESB目前有很多商业方案,也有很多开源产品,例如ObjectWeb,CodeHaus,Sourceforge都有这样的开源项目.距离真正成熟还有一段距离,另外各家厂商都各自为阵,目前JCP还没有这项技术的草案,标准的指定也还有很长的距离.当然,目前的状态和SOA一样.相信等SOA真正普及的时候,ESB会更加的成熟.</p>
<img src ="http://www.blogjava.net/zqli/aggbug/108866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2007-04-06 10:22 <a href="http://www.blogjava.net/zqli/archive/2007/04/06/108866.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]什么是CA？</title><link>http://www.blogjava.net/zqli/archive/2007/04/06/108861.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Fri, 06 Apr 2007 01:54:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2007/04/06/108861.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/108861.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2007/04/06/108861.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/108861.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/108861.html</trackback:ping><description><![CDATA[CA是认证中心的英文Certification Authority的缩写。　CA中心，又称为数字证书认证中心。CA中心作为电子交易中受信任的第三方，负责为电子商务环境中各个实体颁发数字证书，以证明各实体身份的真实性，并负责在交易中检验和管理证书；数字证书的用户拥有自己的公钥/私钥对。证书中包含有证书主体的身份信息、其公钥数据、发证机构名称等，发证机构验证证书主体为合法注册实体后，就对上述信息进行数字签名，形成证书。 在公钥证书体系中，如果某公钥用户需要任何其它已向CA注册的用户的公钥，可直接向该用户索取证书，而后用CA的公钥解密解密即可得到认证的公钥；由于证书中已有CA的签名来实现认证，攻击者不具有CA的签名密钥，很难伪造出合法的证书，从而实现了公钥的认证性。 数字证书认证中心是整个网上电子交易安全的关键环节,是电子交易中信赖的基础。他必须是所有合法注册用户所信赖的具有权威性、信赖性及公正性的第三方机构。<br>CA的核心功能就是发放和管理数字证书。概括地说，CA认证中心的功能主要有：证书发放、证书更新、证书撤销和证书验证。具体描述如下：
<p><br>（1）接收验证用户数字证书的申请。<br>（2）确定是否接受用户数字证书的申请，即证书的审批。<br>（3）向申请者颁发（或拒绝颁发）数字证书。<br>（4）接收、处理用户的数字证书更新请求。<br>（5）接收用户数字证书的查询、撤销。<br>（6）产生和发布证书的有效期。<br>（7）数字证书的归档。<br>（8）密钥归档。<br>（9）历史数据归档。<br></p>
<img src ="http://www.blogjava.net/zqli/aggbug/108861.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2007-04-06 09:54 <a href="http://www.blogjava.net/zqli/archive/2007/04/06/108861.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]深入理解C语言指针的奥秘</title><link>http://www.blogjava.net/zqli/archive/2007/01/20/95082.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Sat, 20 Jan 2007 13:11:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2007/01/20/95082.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/95082.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2007/01/20/95082.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/95082.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/95082.html</trackback:ping><description><![CDATA[
		<p>指针是一个特殊的变量，它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容：指针的类型，指针所指向的 类型，指针的值或者叫指针所指向的内存区，还有指针本身所占据的内存区。让我们分别说明。 <br />　　先声明几个指针放着做例子： <br />　　例一： <br />　　(1)int*ptr; <br />　　(2)char*ptr; <br />　　(3)int**ptr; <br />　　(4)int(*ptr)[3]; <br />　　(5)int*(*ptr)[4]; <br />　　<br />　　指针的类型<br />　　从语法的角度看，你只要把指针声明语句里的指针名字去掉，剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型： <br />　　(1)int*ptr;//指针的类型是int* <br />　　(2)char*ptr;//指针的类型是char* <br />　　(3)int**ptr;//指针的类型是int** <br />　　(4)int(*ptr)[3];//指针的类型是int(*)[3] <br />　　(5)int*(*ptr)[4];//指针的类型是int*(*)[4] <br />　　怎么样？找出指针的类型的方法是不是很简单？ <br />　　指针所指向的类型<br />　　当你通过指针来访问指针所指向的内存区时，指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。 <br />　　从语法上看，你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉，剩下的就是指针所指向的类型。例如： <br />　　(1)int*ptr;//指针所指向的类型是int <br />　　(2)char*ptr;//指针所指向的的类型是char <br />　　(3)int**ptr;//指针所指向的的类型是int* <br />　　(4)int(*ptr)[3];//指针所指向的的类型是int()[3] <br />　　(5)int*(*ptr)[4];//指针所指向的的类型是int*()[4] <br />　　在指针的算术运算中，指针所指向的类型有很大的作用。 <br />　　指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你对C越来越熟悉时，你会发现，把与指针搅和在一起的"类型"这个概念分成"指针的类型"和"指针所指向的类型"两个概念，是精通指针的关键点之一。我看了不少书，发现有些写得差的书中，就把指针的这两个概念搅在一起了，所以看起书来前后矛盾，越看越糊涂。<br />指针的值，或者叫指针所指向的内存区或地址<br />　　指针的值是指针本身存储的数值，这个值将被编译器当作一个地址，而不是一个一般的数值。在32位程序里，所有类型的指针的值都是一个32位整数，因为32位程序里内存地址全都是32位长。 指针所指向的内存区就是从指针的值所代表的那个内存地址开始，长度为si zeof(指针所指向的类型)的一片内存区。以后，我们说一个指针的值是XX，就相当于说该指针指向了以XX为首地址的一片内存区域；我们说一个指针指向了某块内存区域，就相当于说该指针的值是这块内存区域的首地址。 <br />　　指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在例一中，指针所指向的类型已经有了，但由于指针还未初始化，所以它所指向的内存区是不存在的，或者说是无意义的。 <br />　　以后，每遇到一个指针，都应该问问：这个指针的类型是什么？指针指的类型是什么？该指针指向了哪里？ <br />　　指针本身所占据的内存区<br />　　指针本身占了多大的内存？你只要用函数sizeof(指针的类型)测一下就知道了。在32位平台里，指针本身占据了4个字节的长度。 <br />　　指针本身占据的内存这个概念在判断一个指针表达式是否是左值时很有用。 <br />　　指针的算术运算 <br />指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减运算的意义是不一样的。例如： <br />　　例二： <br />　　1、chara[20]; <br />　　2、int*ptr=a; <br />　　... <br />　... <br />　　3、ptr++; <br />　　在上例中，指针ptr的类型是int*,它指向的类型是int，它被初始化为指向整形变量a。接下来的第3句中，指针ptr被加了1，编译器是这样处理的：它把指针ptr的值加上了sizeof(int)，在32位程序中，是被加上了4。由于地址是用字节做单位的，故ptr所指向的地址由原来的变量a的地址向高地址方向增加了4个字节。 <br />由于char类型的长度是一个字节，所以，原来ptr是指向数组a的第0号单元开始的四个字节，此时指向了数组a中从第4号单元开始的四个字节。 <br />　　我们可以用一个指针和一个循环来遍历一个数组，看例子：<br />　　例三： <br />intarray[20]; <br />int*ptr=array; <br />... <br />//此处略去为整型数组赋值的代码。 <br />... <br />for(i=0;i&lt;20;i++) <br />{ <br />　(*ptr)++; <br />　ptr++； <br />}<br />　　这个例子将整型数组中各个单元的值加1。由于每次循环都将指针ptr加1，所以每次循环都能访问数组的下一个单元。 </p>
		<p>　　再看例子： </p>
		<p>　　例四： </p>
		<p>　　1、chara[20]; <br />　　2、int*ptr=a; <br />　　... <br />　　... <br />　　3、ptr+=5;<br />　　在这个例子中，ptr被加上了5，编译器是这样处理的：将指针ptr的值加上5乘sizeof(int)，在32位程序中就是加上了5乘4=20。由于地址的单位是字节，故现在的ptr所指向的地址比起加5后的ptr所指向的地址来说，向高地址方向移动了20个字节。在这个例子中，没加5前的ptr指向数组a的第0号单元开始的四个字节，加5后，ptr已经指向了数组a的合法范围之外了。虽然这种情况在应用上会出问题，但在语法上却是可以的。这也体现出了指针的灵活性。 <br /><br />如果上例中，ptr是被减去5，那么处理过程大同小异，只不过ptr的值是被减去5乘sizeof(int)，新的ptr指向的地址将比原来的ptr所指向的地址向低地址方向移动了20个字节。 <br />　　总结一下，一个指针ptrold加上一个整数n后，结果是一个新的指针ptrnew，ptrnew的类型和ptrold的类型相同，ptrnew所指向的类型和ptrold所指向的类型也相同。ptrnew的值将比ptrold的值增加了n乘sizeof(ptrold所指向的类型)个字节。就是说，ptrnew所指向的内存区将比ptrold所指向的内存区向高地址方向移动了n乘sizeof(ptrold所指向的类型)个字节。 <br />　　一个指针ptrold减去一个整数n后，结果是一个新的指针ptrnew，ptrnew的类型和ptrold的类型相同，ptrnew所指向的类型和ptrold所指向的类型也相同。ptrnew的值将比ptrold的值减少了n乘sizeof(ptrold所指向的类型)个字节，就是说，ptrnew所指向的内存区将比ptrold所指向的内存区向低地址方向移动了n乘sizeof(ptrold所指向的类型)个字节。 <br />运算符&amp;和* <br />这里&amp;是取地址运算符，*是...书上叫做"间接运算符"。 <br />　　&amp;a的运算结果是一个指针，指针的类型是a的类型加个*，指针所指向的类型是a的类型，指针所指向的地址嘛，那就是a的地址。 <br />　　*p的运算结果就五花八门了。总之*p的结果是p所指向的东西，这个东西有这些特点：它的类型是p指向的类型，它所占用的地址是p所指向的地址。 <br />　　例五： <br />inta=12; <br />intb; <br />int*p;<br />int**ptr; <br />p=&amp;a;<br />//&amp;a的结果是一个指针，类型是int*，指向的类型是int，指向的地址是a的地址。 <br />*p=24;<br />//*p的结果，在这里它的类型是int，它所占用的地址是p所指向的地址，显然，*p就是变量a。 <br />ptr=&amp;p;<br />//&amp;p的结果是个指针，该指针的类型是p的类型加个*，在这里是int **。该指针所指向的类型是p的类型，这里是int*。该指针所指向的地址就是指针p自己的地址。 <br />*ptr=&amp;b;<br />//*ptr是个指针，&amp;b的结果也是个指针，且这两个指针的类型和所指向的类型是一样的，所以用&amp;b来给*ptr赋值就是毫无问题的了。 <br />**ptr=34;<br />//*ptr的结果是ptr所指向的东西，在这里是一个指针，对这个指针再做一次*运算，结果就是一个int类型的变量。<br />　　指针表达式 <br />一个表达式的最后结果如果是一个指针，那么这个表达式就叫指针表式。 <br />　　下面是一些指针表达式的例子： <br />　　例六： <br />inta,b; <br />intarray[10]; <br />int*pa; <br />pa=&amp;a;//&amp;a是一个指针表达式。 <br />int**ptr=&amp;pa;//&amp;pa也是一个指针表达式。 <br />*ptr=&amp;b;//*ptr和&amp;b都是指针表达式。 <br />pa=array; <br />pa++;//这也是指针表达式。<br />例七： <br />char*arr[20]; <br />char**parr=arr;//如果把arr看作指针的话，arr也是指针表达式 <br />char*str; <br />str=*parr;//*parr是指针表达式 <br />str=*(parr+1);//*(parr+1)是指针表达式 <br />str=*(parr+2);//*(parr+2)是指针表达式<br />　　由于指针表达式的结果是一个指针，所以指针表达式也具有指针所具有的四个要素：指针的类型，指针所指向的类型，指针指向的内存区，指针自身占据的内存。</p>
		<p>　　好了，当一个指针表达式的结果指针已经明确地具有了指针自身占据的内存的话，这个指针表达式就是一个左值，否则就不是一个左值。 <br />　　在例七中，&amp;a不是一个左值，因为它还没有占据明确的内存。*ptr是一个左值，因为*ptr这个指针已经占据了内存，其实*ptr就是指针pa，既然pa已经在内存中有了自己的位置，那么*ptr当然也有了自己的位置。 <br />　　数组和指针的关系 <br />　　数组的数组名其实可以看作一个指针。看下例： <br />　　例八： <br />intarray[10]={0,1,2,3,4,5,6,7,8,9},value; <br />... <br />... <br />value=array[0];//也可写成：value=*array; <br />value=array[3];//也可写成：value=*(array+3); <br />value=array[4];//也可写成：value=*(array+4);<br />上例中，一般而言数组名array代表数组本身，类型是int[10]，但如果把array看做指针的话，它指向数组的第0个单元，类型是int*，所指向的类型是数组单元的类型即int。因此*array等于0就一点也不奇怪了。同理，array+3是一个指向数组第3个单元的指针，所以*(array+3)等于3。其它依此类推。 </p>
		<p>　　例九： <br />char*str[3]={ <br />　"Hello,thisisasample!", <br />　"Hi,goodmorning.", <br />　"Helloworld" <br />}; <br />chars[80]； <br />strcpy(s,str[0]);//也可写成strcpy(s,*str); <br />strcpy(s,str[1]);//也可写成strcpy(s,*(str+1)); <br />strcpy(s,str[2]);//也可写成strcpy(s,*(str+2));<br />上例中，str是一个三单元的数组，该数组的每个单元都是一个指针，这些指针各指向一个字符串。把指针数组名str当作一个指针的话，它指向数组的第0号单元，它的类型是char**，它指向的类型是char*。 <br />*str也是一个指针，它的类型是char*，它所指向的类型是char，它指向的地址是字符串"Hello,thisisasample!"的第一个字符的地址，即'H'的地址。 str+1也是一个指针，它指向数组的第1号单元，它的类型是char**，它指向的类型是char*。 </p>
		<p>　　*(str+1)也是一个指针，它的类型是char*，它所指向的类型是char，它指向 "Hi,goodmorning."的第一个字符'H'，等等。 </p>
		<p>　　下面总结一下数组的数组名的问题。声明了一个数组TYPEarray[n]，则数组名称array就有了两重含义：第一，它代表整个数组，它的类型是TYPE[n]；第二 ，它是一个指针，该指针的类型是TYPE*，该指针指向的类型是TYPE，也就是数组单元的类型，该指针指向的内存区就是数组第0号单元，该指针自己占有单独的内存区，注意它和数组第0号单元占据的内存区是不同的。该指针的值是不能修改的，即类似array++的表达式是错误的。 <br />　　在不同的表达式中数组名array可以扮演不同的角色。 <br />　　在表达式sizeof(array)中，数组名array代表数组本身，故这时sizeof函数测出的是整个数组的大小。 <br />在表达式*array中，array扮演的是指针，因此这个表达式的结果就是数组第0号单元的值。sizeof(*array)测出的是数组单元的大小。 <br />　　表达式array+n（其中n=0，1，2，....。）中，array扮演的是指针，故array+n的结果是一个指针，它的类型是TYPE*，它指向的类型是TYPE，它指向数组第n号单元。故sizeof(array+n)测出的是指针类型的大小。 <br />例十<br />intarray[10]; <br />int(*ptr)[10]; <br />ptr=&amp;array;： <br />上例中ptr是一个指针，它的类型是int(*)[10]，他指向的类型是int[10] ，我们用整个数组的首地址来初始化它。在语句ptr=&amp;array中，array代表数组本身。 </p>
		<p>　　本节中提到了函数sizeof()，那么我来问一问，sizeof(指针名称)测出的究竟是指针自身类型的大小呢还是指针所指向的类型的大小？答案是前者。例如： <br />int(*ptr)[10]; <br />　　则在32位程序中，有： <br />sizeof(int(*)[10])==4 <br />sizeof(int[10])==40 <br />sizeof(ptr)==4<br />实际上，sizeof(对象)测出的都是对象自身的类型的大小，而不是别的什么类型的大小。<br />指针和结构类型的关系 <br />可以声明一个指向结构类型对象的指针。 <br />　　例十一： <br />structMyStruct <br />{ <br />　inta; <br />　intb; <br />　intc; <br />} <br />MyStructss={20,30,40};<br />//声明了结构对象ss，并把ss的三个成员初始化为20，30和40。 <br />MyStruct*ptr=&amp;ss;<br />//声明了一个指向结构对象ss的指针。它的类型是MyStruct*,它指向的类型是MyStruct。 <br />int*pstr=(int*)&amp;ss;<br />//声明了一个指向结构对象ss的指针。但是它的类型和它指向的类型和ptr是不同的。<br />　　请问怎样通过指针ptr来访问ss的三个成员变量？ <br />　　答案： <br />ptr-&gt;a; <br />ptr-&gt;b; <br />ptr-&gt;c; <br />　　又请问怎样通过指针pstr来访问ss的三个成员变量？ <br />　　答案： <br />*pstr；//访问了ss的成员a。 <br />*(pstr+1);//访问了ss的成员b。 <br />*(pstr+2)//访问了ss的成员c。 <br />　　虽然我在我的MSVC++6.0上调式过上述代码，但是要知道，这样使用pstr来访问结构成员是不正规的，为了说明为什么不正规，让我们看看怎样通过指针来访问数组的各个单元： <br />　　例十二： <br />intarray[3]={35,56,37}; <br />int*pa=array; <br />　　通过指针pa访问数组array的三个单元的方法是： <br />*pa;//访问了第0号单元 <br />*(pa+1);//访问了第1号单元 <br />*(pa+2);//访问了第2号单元 <br /><br />从格式上看倒是与通过指针访问结构成员的不正规方法的格式一样。 <br />　　所有的C/C++编译器在排列数组的单元时，总是把各个数组单元存放在连续的存储区里，单元和单元之间没有空隙。但在存放结构对象的各个成员时，在某种编译环境下，可能会需要字对齐或双字对齐或者是别的什么对齐，需要在相邻两个成员之间加若干个"填充字节"，这就导致各个成员之间可能会有若干个字节的空隙。 <br />　　所以，在例十二中，即使*pstr访问到了结构对象ss的第一个成员变量a，也不能保证*(pstr+1)就一定能访问到结构成员b。因为成员a和成员b之间可能会有若干填充字节，说不定*(pstr+1)就正好访问到了这些填充字节呢。这也证明了指针的灵活性。要是你的目的就是想看看各个结构成员之间到底有没有填充字节，嘿，这倒是个不错的方法。 <br />过指针访问结构成员的正确方法应该是象例十二中使用指针ptr的方法。 <br />　　指针和函数的关系 <br />　　可以把一个指针声明成为一个指向函数的指针。intfun1(char*,int); <br />int(*pfun1)(char*,int); <br />pfun1=fun1; <br />.... <br />.... <br />inta=(*pfun1)("abcdefg",7);//通过函数指针调用函数。 <br />可以把指针作为函数的形参。在函数调用语句中，可以用指针表达式来作为实参。 <br />　　例十三： <br />intfun(char*); <br />inta; <br />charstr[]="abcdefghijklmn"; <br />a=fun(str); <br />... <br />... <br />intfun(char*s) <br />{ <br />intnum=0; <br />for(inti=0;i{ <br />num+=*s;s++; <br />} <br />returnnum;<br />}<br />　　这个例子中的函数fun统计一个字符串中各个字符的ASCII码值之和。前面说了，数组的名字也是一个指针。在函数调用中，当把str作为实参传递给形参s后，实际是把str的值传递给了s，s所指向的地址就和str所指向的地址一致，但是str和s各自占用各自的存储空间。在函数体内对s进行自加1运算，并不意味着同时对str进行了自加1运算。<br />指针类型转换 <br />当我们初始化一个指针或给一个指针赋值时，赋值号的左边是一个指针，赋值号的右边是一个指针表达式。在我们前面所举的例子中，绝大多数情况下，指针的类型和指针表达式的类型是一样的，指针所指向的类型和指针表达式所指向的类型是一样的。 <br />　　例十四： <br />　　1、floatf=12.3; <br />　　2、float*fptr=&amp;f; <br />　　3、int*p; <br />　　　在上面的例子中，假如我们想让指针p指向实数f，应该怎么搞？是用下面的语句吗？ </p>
		<p>　　p=&amp;f; </p>
		<p>　　不对。因为指针p的类型是int*，它指向的类型是int。表达式&amp;f的结果是一个指针，指针的类型是float*,它指向的类型是float。两者不一致，直接赋值的方法是不行的。至少在我的MSVC++6.0上，对指针的赋值语句要求赋值号两边的类型一致，所指向的类型也一致，其它的编译器上我没试过，大家可以试试。为了实现我们的目的，需要进行"强制类型转换"： <br />p=(int*)&amp;f;<br />如果有一个指针p，我们需要把它的类型和所指向的类型改为TYEP*TYPE， 那么语法格式是： <br />　　(TYPE*)p； <br />　　这样强制类型转换的结果是一个新指针，该新指针的类型是TYPE*，它指向的类型是TYPE，它指向的地址就是原指针指向的地址。而原来的指针p的一切属性都没有被修改。 <br />　　一个函数如果使用了指针作为形参，那么在函数调用语句的实参和形参的结合过程中，也会发生指针类型的转换。 <br />　　例十五：<br />voidfun(char*); <br />inta=125,b; <br />fun((char*)&amp;a); <br />... <br />... <br />voidfun(char*s) <br />{ <br />charc; <br />c=*(s+3);*(s+3)=*(s+0);*(s+0)=c; <br />c=*(s+2);*(s+2)=*(s+1);*(s+1)=c; <br />} <br />} <br />注意这是一个32位程序，故int类型占了四个字节，char类型占一个字节。函数fun的作用是把一个整数的四个字节的顺序来个颠倒。注意到了吗？在函数调用语句中，实参&amp;a的结果是一个指针，它的类型是int*，它指向的类型是int。形参这个指针的类型是char*，它指向的类型是char。这样，在实参和形参的结合过程中，我们必须进行一次从int*类型到char*类型的转换。结合这个例子，我们可以这样来想象编译器进行转换的过程：编译器先构造一个临时指针char*temp， 然后执行temp=(char*)&amp;a，最后再把temp的值传递给s。所以最后的结果是：s的类型是char*,它指向的类型是char，它指向的地址就是a的首地址。 </p>
		<p>　　我们已经知道，指针的值就是指针指向的地址，在32位程序中，指针的值其实是一个32位整数。那可不可以把一个整数当作指针的值直接赋给指针呢？就象下面的语句：<br />unsignedinta; <br />TYPE*ptr;//TYPE是int，char或结构类型等等类型。 <br />... <br />... <br />a=20345686; <br />ptr=20345686;//我们的目的是要使指针ptr指向地址20345686（十进制 <br />） <br />ptr=a;//我们的目的是要使指针ptr指向地址20345686（十进制）<br />编译一下吧。结果发现后面两条语句全是错的。那么我们的目的就不能达到了吗？不，还有办法： <br />unsignedinta; <br />TYPE*ptr;//TYPE是int，char或结构类型等等类型。 <br />... <br />... <br />a=某个数，这个数必须代表一个合法的地址； <br />ptr=(TYPE*)a；//呵呵，这就可以了。<br />严格说来这里的(TYPE*)和指针类型转换中的(TYPE*)还不一样。这里的(TYPE*)的意思是把无符号整数a的值当作一个地址来看待。上面强调了a的值必须代表一个合法的地址，否则的话，在你使用ptr的时候，就会出现非法操作错误。 </p>
		<p>　　想想能不能反过来，把指针指向的地址即指针的值当作一个整数取出来。完 全可以。下面的例子演示了把一个指针的值当作一个整数取出来，然后再把这个整数当作一个地址赋给一个指针： <br />　　例十六： <br />inta=123,b; <br />int*ptr=&amp;a; <br />char*str; <br />b=(int)ptr;//把指针ptr的值当作一个整数取出来。 <br />str=(char*)b;//把这个整数的值当作一个地址赋给指针str。<br />　　现在我们已经知道了，可以把指针的值当作一个整数取出来，也可以把一个整数值当作地址赋给一个指针。 <br />　　指针的安全问题 <br />看下面的例子： <br />　　例十七：<br />chars='a'; <br />int*ptr; <br />ptr=(int*)&amp;s; <br />*ptr=1298； <br />　　指针ptr是一个int*类型的指针，它指向的类型是int。它指向的地址就是s的首地址。在32位程序中，s占一个字节，int类型占四个字节。最后一条语句不但改变了s所占的一个字节，还把和s相临的高地址方向的三个字节也改变了。这三个字节是干什么的？只有编译程序知道，而写程序的人是不太可能知道的。也许这三个字节里存储了非常重要的数据，也许这三个字节里正好是程序的一条代码，而由于你对指针的马虎应用，这三个字节的值被改变了！这会造成崩溃性的错误。 <br />　　让我们再来看一例： <br />　　例十八： <br />　　1、chara; <br />　　2、int*ptr=&amp;a; <br />　　... <br />　　... <br />　　3、ptr++; <br />　　4、*ptr=115; <br />　　该例子完全可以通过编译，并能执行。但是看到没有？第3句对指针ptr进行自加1运算后，ptr指向了和整形变量a相邻的高地址方向的一块存储区。这块存储区里是什么？我们不知道。有可能它是一个非常重要的数据，甚至可能是一条代码。而第4句竟然往这片存储区里写入一个数据！这是严重的错误。所以在使用指针时，程序员心里必须非常清楚：我的指针究竟指向了哪里。在用指针访问数组的时候，也要注意不要超出数组的低端和高端界限，否则也会造成类似的错误。 <br />　　在指针的强制类型转换：ptr1=(TYPE*)ptr2中，如果sizeof(ptr2的类型)大于sizeof(ptr1的类型)，那么在使用指针ptr1来访问ptr2所指向的存储区时是安全的。如果sizeof(ptr2的类型)小于sizeof(ptr1的类型)，那么在使用指针ptr1来访问ptr2所指向的存储区时是不安全的。至于为什么，读者结合例十七来想一想，应该会明白的。</p>
		<p>
				<br />
				<a href="http://embedfans.com/C/2007181016375897.htm">http://embedfans.com/C/2007181016375897.htm</a>
				<br />
		</p>
<img src ="http://www.blogjava.net/zqli/aggbug/95082.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2007-01-20 21:11 <a href="http://www.blogjava.net/zqli/archive/2007/01/20/95082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>宋词赏析-蝶恋花</title><link>http://www.blogjava.net/zqli/archive/2006/12/07/86019.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Thu, 07 Dec 2006 02:19:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/12/07/86019.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/86019.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/12/07/86019.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/86019.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/86019.html</trackback:ping><description><![CDATA[
		<table id="zwk" cellspacing="0" width="780" align="center" border="0">
				<tbody>
						<tr>
								<td class="bt" align="middle" bgcolor="#ffffff" height="40">蝶恋花</td>
						</tr>
						<tr>
								<td class="sm" align="middle" bgcolor="#ffffff">柳永</td>
						</tr>
						<tr>
								<td align="middle" bgcolor="#ffffff">
										<br />伫倚危楼 风细细，望极春愁，黯黯生天际。草色烟光残照里，无言谁会凭阑意？<br />拟把疏狂图一醉，对酒当歌，强乐还无味。衣带渐宽终不悔，为伊消得人憔悴。 </td>
						</tr>
						<tr>
								<td bgcolor="#ffffff" height="18">
								</td>
						</tr>
						<tr>
								<td bgcolor="#ccffff">
										<table cellspacing="0" cellpadding="10" width="100%" border="0">
												<tbody>
														<tr>
																<td class="sm">【赏析】<br />　　这是一首怀人之作。词人把漂泊异乡的落魄感受，同怀念意中人的缠绵情思结合在一起写，采用“曲径通幽”的表现方式，抒情写景，感情真挚。上片写登楼伫望情景。以细风、草色、烟光、残阳几个关合着相思离愁的意象，组成一幅黄昏春望图。上片以“春愁”为核心多层次地描摹春愁之景，春愁之态，笔意婉约。下片抒情，直抒胸臆，写词人情深志坚。“拟把”、“强乐”三句辞意顿折，写词人欲借疏狂之歌呼，陶然之酣醉，谋求醉而忘忧，歌而暂欢，以摆脱春愁之压抑和纠缠，却落得个“还无味”的无聊和空虚，可见其春愁之浓深、刻骨，竟无法排遣。最后揭明词人对待“春愁”的果决态度：“终不悔”。“为伊”，方始画龙点晴地道破春愁难遣，为春愁憔悴无悔的隐秘：为了她——那“盈盈仙子”(《曲玉管》)的坚贞情爱，我亦值得憔悴、瘦损，以生命相托！语直情切，挟带着市民式的激情，真是荡气回肠。全词成功地刻画出一个志诚男子的形象，描写心理充分细腻，尤其是词的最后两句，直抒胸臆，画龙点睛般地揭示出主人公的精神境界，被王国维称为“专作情语而绝妙者”。<br /></td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/zqli/aggbug/86019.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-12-07 10:19 <a href="http://www.blogjava.net/zqli/archive/2006/12/07/86019.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是VBA？</title><link>http://www.blogjava.net/zqli/archive/2006/12/05/85649.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Tue, 05 Dec 2006 10:41:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/12/05/85649.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/85649.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/12/05/85649.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/85649.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/85649.html</trackback:ping><description><![CDATA[直到90年代早期,使应用程序自动化还是充满挑战性的领域.对每个需要自动化的应用程序,人们不得不学习一种不同的自动化语言.例如:可以用EXCEL的宏语言来使EXCEL自动化,使用WORD BASIC使WORD自动化,等等.微软决定让它开发出来的应用程序共享一种通用的自动化语言--------Visual Basic For Application(VBA),可以认为VBA是非常流行的应用程序开发语言VASUAL BASIC 的子集.实际上VBA是"寄生于"VB应用程序的版本.VBA和VB的区别包括如下几个方面: <br /><br />1. VB是设计用于创建标准的应用程序,而VBA是使已有的应用程序(EXCEL等)自动化 <br /><br />2. VB具有自己的开发环境,而VBA必须寄生于已有的应用程序. <br /><br />3. 要运行VB开发的应用程序,用户不必安装VB,因为VB开发出的应用程序是可执行文件(*.EXE),而VBA开发的程序必须依赖于它的"父"应用程序,例如EXCEL. <br /><br />尽管存在这些不同,VBA和VB在结构上仍然十分相似.事实上,如果你已经了解了VB,会发现学习VBA非常快.相应的,学完VBA会给学习VB打下坚实的基础.而且,当学会在EXCEL中用VBA创建解决方案后,即已具备在WORD ACCESS OUTLOOK FOXPRO PROWERPOINT 中用VBA创建解决方案的大部分知识. <br /><br />* VBA一个关键特征是你所学的知识在微软的一些产品中可以相互转化. <br /><br />* VBA可以称作EXCEL的“遥控器”. <br /><br />VBA究竟是什么?更确切地讲,它是一种自动化语言,它可以使常用的程序自动化,可以创建自定义的解决方案. <br /><br />此外,如果你愿意,还可以将EXCEL用做开发平台实现应用程序. <br /><br />1.2 EXCEL环境中基于应用程序自动化的优点 <br /><br />也许你想知道VBA可以干什么?使用VBA可以实现的功能包括: <br /><br />1. 使重复的任务自动化. <br /><br />2. 自定义EXCEL工具栏,菜单和界面. <br /><br />3. 简化模板的使用. <br /><br />4. 自定义EXCEL,使其成为开发平台. <br /><br />5. 创建报表. <br /><br />6. 对数据进行复杂的操作和分析. <br /><br />用EXCEL作为开发平台有如下原因: <br /><br />1. EXCEL本身功能强大,包括打印,文件处理,格式化和文本编辑. <br /><br />2. EXCEL内置大量函数. <br /><br />3. EXCEL界面熟悉. <br /><br />4. 可连接到多种数据库. <br /><br />参考资料：<a href="http://www.vipstar.net/" target="_blank"><font color="#261cdc">www.vipstar.net</font></a><img src ="http://www.blogjava.net/zqli/aggbug/85649.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-12-05 18:41 <a href="http://www.blogjava.net/zqli/archive/2006/12/05/85649.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何评价洪秀全?</title><link>http://www.blogjava.net/zqli/archive/2006/11/29/84418.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Wed, 29 Nov 2006 12:15:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/11/29/84418.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/84418.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/11/29/84418.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/84418.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/84418.html</trackback:ping><description><![CDATA[他一生的业绩主要是： <br />一、1843年创立“拜上帝会”，对动员群众推翻清朝统治的斗争起了重要的宣传和组织作用；其后写的《原道救世训》、《原道醒世训》、《原道觉世训》等著作，为太平天国起义作好了思想舆论准备。经数年努力，洪秀全在杰出的农民领袖冯云山的帮助下，拜上帝会得以迅速发展，为金田起义奠定了基础。 <br />二、从1851年1月11日金田起义到1864年天京陷落前夕，洪秀全领导了这场农民战争的全过程，历时14年，势力发展到18省，先后攻占600多座城市，给了中外反动势力以沉重打击。 <br />三、两次建立领导核心。前期，在永安建制分封诸王，使太平天国初具规模，加强了领导力量，提高了太平军战斗力，为太平天国的迅猛发展打下了基础；后期，在“国中无人，朝中无将”的局面上，洪秀全选拔了陈玉成、李秀成等青年将领主持军事，任命洪仁□提理天朝政务，形成了一个新的领导班子，使太平天国能继续坚持斗争。 <br />四、颁布革命纲领。前期，1853年冬，颁布了《天朝田亩制度》，提出改变土地制度和其他改革社会的措施。其内容表现了农民反封建的要求和解决土地问题的强烈愿望。纲领内容的完备性和深刻性，使太平天国革命达到了中国历代农民革命所能达到的最高思想境界。 <br />1859年颁布了为仿效西方资本主义国家而写的《资政新篇》一书。这是后期太平天国的重要政纲，说明他在对待资本主义的态度上，较同时代的地主统治阶级思想开明，眼界开阔。 <br />太平天国运动，之所以能成为几千年来中国农民战争的最高峰，是与他的巨大贡献分不开的。乃至中国民主革命先驱孙中山愿作洪秀全第二，即可见其对后世的深远影响。太平天国是在中外反动势力联合绞杀之下失败的。但作为太平天国运动的最高领导人，洪秀全的严重错误也是不可忽视的。洪秀全的错误主要在于， <br />一、定都天京后，封建意识与日俱增，等级观念、享乐思想尤其突出。洪秀全在天王府深居简出，严重脱离将士群众。在太平天国革命政权向一个新的封建王朝政权蜕变的过程中，洪秀全起了特别恶劣的带头作用。思想作风上的质变，使其愈往后，则更多地像一个封建帝王。天京内讧就是领导集团内部这种封建思想发展的必然结果。 <br />二、太平天国后期，为防大权旁落，洪秀全一反前期用人路线而“用人唯亲”，形成一个排斥异姓的洪氏集团，使得后期政治日益腐败，给太平天国内部带来致命危机。石达开是太平军最优秀的统帅，所部又是太平军精锐。他德才兼备，深得全体军民拥戴，天京内讧之后，他是唯一能团结群众辅佐洪秀全重振国势的人选。然而，洪秀全猜忌他，用安、福二王挟制和排挤他。因此，石达开出走，致使太平天国出现分裂局面。其后，陈玉成、李秀成打破江北大营、江南大营，京围一解，洪秀全立刻大封王爵，根本不问才德、功劳，亲戚、广东同乡或捐有钱粮者，都可以封王。封王人数竟达到2700人以上。造成后期天国朝政混乱、吏治败坏、军事削弱的局面。 <br />三、洪秀全晚年，不仅思想狭隘保守，而且陷入了宗教迷信的可悲泥潭。 <br />1864年3月，天京合围后，城内断粮。洪秀全带头吃“甜露”(草团)充饥。残酷的斗争和饥饿使太平天国领袖洪秀全卧病不起。1864年6月1日，洪秀全病逝南京。<img src ="http://www.blogjava.net/zqli/aggbug/84418.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-11-29 20:15 <a href="http://www.blogjava.net/zqli/archive/2006/11/29/84418.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转] 用分冶策略解决关于二叉树的几个问题 </title><link>http://www.blogjava.net/zqli/archive/2006/11/29/84414.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Wed, 29 Nov 2006 11:25:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/11/29/84414.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/84414.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/11/29/84414.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/84414.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/84414.html</trackback:ping><description><![CDATA[
		<p>
				<strong>问题的提出</strong>
		</p>
		<p>
				<font size="2">    经常会遇到关于二叉树的算法问题，虽然比较简单，不过我觉得还是有必要总结一下．顺便写了个sample程序，以供参考．本文中主要讨论关于二叉树的以下3个问题,都是用递归来实现，Divide and conquer也就是所谓的分冶策略．<br />    1.二叉树的高度<br />    2.二叉树的宽度<br />    3.比较两个二叉树是否相等<br />此文对应的参考程序可以在 <a href="http://shaohui.zheng.googlepages.com/bst.c"><font color="#73af1d">http://shaohui.zheng.googlepages.com/bst.c</font></a> 下载。</font>
		</p>
		<p>
				<strong>数据结构的定义</strong>
		</p>
		<p>
				<font size="2">    先定义一个简单的二叉树，由于只是演示，所以定义得比较简单．</font>
		</p>
		<p>
				<font color="#804040" size="2"> 1 </font>
				<font size="2">
						<font color="#a020f0">#include </font>
						<font color="#ff00ff">&lt;stdio.h&gt;</font>
						<br />
						<font color="#804040"> 2 </font>
						<br />
						<font color="#804040"> 3 </font>
						<font color="#a020f0">#define MAX(x,y) ((x)&gt;(y)?(x):(y))</font>
						<br />
						<font color="#804040"> 4 </font>
						<br />
						<font color="#804040"> 5 </font>
						<font color="#0000ff">//define a binary search tree</font>
						<br />
						<font color="#804040"> 6 </font>
						<font color="#2e8b57">
								<strong>typedef</strong>
						</font>
						<font color="#2e8b57">
								<strong>struct</strong>
						</font> BNode<br /><font color="#804040"> 7 </font>{<br /><font color="#804040"> 8 </font>    <font color="#2e8b57"><strong>int</strong></font> val;<br /><font color="#804040"> 9 </font>    <font color="#2e8b57"><strong>struct</strong></font> BNode *left, *right;<br /><font color="#804040">10 </font>}BNode,*BTree;</font>
		</p>
		<p>
				<font size="2">二叉树节点的值为val,另外为了比较方便还定义了一个宏MAX.</font>
		</p>
		<p>
				<font color="#804040" size="2">12 </font>
				<font size="2">
						<font color="#0000ff">// insert a node to binary tree</font>
						<br />
						<font color="#804040">13 </font>
						<font color="#0000ff">// we assume that no duplicated elements</font>
						<br />
						<font color="#804040">14 </font>
						<font color="#2e8b57">
								<strong>void</strong>
						</font> BTreeInsert(BTree *bt, <font color="#2e8b57"><strong>int</strong></font> val)<br /><font color="#804040">15 </font>{<br /><font color="#804040">16 </font>    BNode *p = *bt,*cur = *bt;<font color="#0000ff">//p is a parent node of cur</font><br /><font color="#804040">17 </font>    <font color="#804040"><strong>while</strong></font> (cur != <font color="#ff00ff">NULL</font>)<br /><font color="#804040">18 </font>    {<font color="#0000ff">//find the position to insert node val</font><br /><font color="#804040">19 </font>        p = cur;<br /><font color="#804040">20 </font>        <font color="#804040"><strong>if</strong></font> ( val &lt; cur-&gt;val )<br /><font color="#804040">21 </font>            cur = cur-&gt;left;<br /><font color="#804040">22 </font>        <font color="#804040"><strong>else</strong></font><br /><font color="#804040">23 </font>            cur = cur-&gt;right;<br /><font color="#804040">24 </font>    }<br /><font color="#804040">25 </font>    BNode *n = malloc(<font color="#804040"><strong>sizeof</strong></font>(BNode));<br /><font color="#804040">26 </font>    n-&gt;val = val;<br /><font color="#804040">27 </font>    n-&gt;left = n-&gt;right = <font color="#ff00ff">NULL</font>;<br /><font color="#804040">28 </font>    <font color="#804040"><strong>if</strong></font> (p == <font color="#ff00ff">NULL</font>)<br /><font color="#804040">29 </font>        *bt = n;<font color="#0000ff">// the tree is empty </font><br /><font color="#804040">30 </font>    <font color="#804040"><strong>else</strong></font><br /><font color="#804040">31 </font>    {<br /><font color="#804040">32 </font>        <font color="#804040"><strong>if</strong></font> (val &lt; p-&gt;val)<br /><font color="#804040">33 </font>            p-&gt;left = n;<br /><font color="#804040">34 </font>        <font color="#804040"><strong>else</strong></font><br /><font color="#804040">35 </font>            p-&gt;right = n;<br /><font color="#804040">36 </font>    }<br /><font color="#804040">37 </font>}</font>
				<font color="#0000ff">
						<font size="2">//BTreeInsert</font>
				</font>
				<br />
				<font size="2">还定义了一个函数BTreeInsert用来帮助创建二叉树．</font>
		</p>
		<p>
				<strong>二叉树的高度<br /><br /></strong>
				<font size="2">基本方法：二叉树，分别求出左右子数的高度，然后取左右子树高度的最大数值，再加上１，就是二叉树的高度．<br />由于该问题又被划分为两个性质一样的子问题，因此很容易导致递归．</font>
				<strong>
						<br />
				</strong>
				<font color="#804040" size="2">39 </font>
				<font size="2">
						<font color="#0000ff">//get the depth of a BST</font>
						<br />
						<font color="#804040">40 </font>
						<font color="#2e8b57">
								<strong>int</strong>
						</font> BTreeDepth(BTree bt)<br /><font color="#804040">41 </font>{<br /><font color="#804040">42 </font>    <font color="#804040"><strong>if</strong></font> (bt != <font color="#ff00ff">NULL</font>)<br /><font color="#804040">43 </font>    {<br /><font color="#804040">44 </font>        <font color="#2e8b57"><strong>int</strong></font> dep_left = BTreeDepth(bt-&gt;left);<br /><font color="#804040">45 </font>        <font color="#2e8b57"><strong>int</strong></font> dep_right = BTreeDepth(bt-&gt;right);<br /><font color="#804040">46 </font>        <font color="#804040"><strong>return</strong></font> MAX(dep_left,dep_right)+<font color="#ff00ff">1</font>;<br /><font color="#804040">47 </font>    }<br /><font color="#804040">48 </font>    <font color="#804040"><strong>return</strong></font><font color="#ff00ff">0</font>;<br /><font color="#804040">49 </font>}</font>
				<font color="#0000ff">
						<font size="2">//BTreeDepth</font>
				</font>
				<br />
				<strong>
						<br />二叉树的宽度<br /><br /></strong>
				<font size="2">基本方法：左右子树的宽度相加，于是就得到二叉树的宽度．<br /></font>
				<font color="#804040" size="2">66 </font>
				<font size="2">
						<font color="#0000ff">//get the width of a BST </font>
						<br />
						<font color="#804040">67 </font>
						<font color="#2e8b57">
								<strong>int</strong>
						</font> BTreeWidth(BTree bt)<br /><font color="#804040">68 </font>{<br /><font color="#804040">69 </font>    <font color="#804040"><strong>if</strong></font> (bt != <font color="#ff00ff">NULL</font>)<br /><font color="#804040">70 </font>    {<br /><font color="#804040">71 </font>        <font color="#804040"><strong>if</strong></font> ((bt-&gt;left == bt-&gt;right) &amp;&amp; (bt-&gt;left == <font color="#ff00ff">NULL</font>))<br /><font color="#804040">72 </font>            <font color="#804040"><strong>return</strong></font><font color="#ff00ff">1</font>;<font color="#0000ff">// bt is a leaf </font><br /><font color="#804040">73 </font>        <font color="#804040"><strong>else</strong></font><br /><font color="#804040">74 </font>            <font color="#804040"><strong>return</strong></font> BTreeWidth(bt-&gt;left) + BTreeWidth(bt-&gt;right);<br /><font color="#804040">75 </font>    }<br /><font color="#804040">76 </font>    <font color="#804040"><strong>else</strong></font><br /><font color="#804040">77 </font>        <font color="#804040"><strong>return</strong></font><font color="#ff00ff">0</font>;<br /><font color="#804040">78 </font>}<font color="#0000ff">//BTreeWidth</font><br /></font>
				<font color="#804040" size="2">79 </font>
				<br />
				<font size="2">
						<br />
				</font>
				<strong>二叉树的比较<br /><br /></strong>
				<font size="2">    如果我们认为左右子树位置很重要，也就是说把左右子树交换以后，我们认为它和原来的子树不一样了，那么只需要比较一次就可以了。</font>
				<strong>
						<br />
				</strong>
				<font color="#804040" size="2">51 </font>
				<font size="2">
						<font color="#0000ff">//compare 2 binary tree, if bt1 is equal bt2</font>
						<br />
						<font color="#804040">52 </font>
						<font color="#0000ff">//return 1, or return 0</font>
						<br />
						<font color="#804040">53 </font>
						<font color="#2e8b57">
								<strong>int</strong>
						</font> BTreeCompare(BTree bt1, BTree bt2)<br /><font color="#804040">54 </font>{<br /><font color="#804040">55 </font>    <font color="#804040"><strong>if</strong></font> ((bt1==bt2) &amp;&amp; (bt1==<font color="#ff00ff">NULL</font>)) <font color="#0000ff">// both bt1 and bt2 are empty</font><br /><font color="#804040">56 </font>        <font color="#804040"><strong>return</strong></font><font color="#ff00ff">1</font>;<br /><font color="#804040">57 </font>    <font color="#804040"><strong>else</strong></font><font color="#804040"><strong>if</strong></font> ((bt1 != <font color="#ff00ff">NULL</font>) &amp;&amp; (bt2 != <font color="#ff00ff">NULL</font>)) <font color="#0000ff">// none of bt1 and bt2 is empty</font><br /><font color="#804040">58 </font>    {<br /><font color="#804040">59 </font>        <font color="#804040"><strong>return</strong></font> BTreeCompare(bt1-&gt;left, bt2-&gt;left)<br /><font color="#804040">60 </font>            &amp;&amp; BTreeCompare(bt1-&gt;right, bt2-&gt;right);<br /><font color="#804040">61 </font>    }<br /><font color="#804040">62 </font>    <font color="#804040"><strong>else</strong></font><font color="#0000ff">// one of bt1 and bt2 is empty</font><br /><font color="#804040">63 </font>        <font color="#804040"><strong>return</strong></font><font color="#ff00ff">0</font>;<br /><font color="#804040">64 </font>}<br />    如果我们认为左右子树位置不重要，也就是说把左右子树交换以后，我们认为它和原来的子树还是一样的，那么我们还好多加判断．把其中一个子树左右位置交换以后再比较．那么原来的程序需要有一些改动．</font>
		</p>
		<p>
				<font size="2">59-60行需要改成以下内容就可以了。<br /><font color="#804040">59 </font>        <font color="#804040"><strong>return</strong></font> (BTreeCompare(bt1-&gt;left, bt2-&gt;left) &amp;&amp; BTreeCompare(bt1-&gt;right, bt2-&gt;right))<br /><font color="#804040">60 </font>            || (BTreeCompare(bt1-&gt;left, bt2-&gt;right) &amp;&amp; BTreeCompare(bt1-&gt;right, bt2-&gt;left));</font>
		</p>
<img src ="http://www.blogjava.net/zqli/aggbug/84414.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-11-29 19:25 <a href="http://www.blogjava.net/zqli/archive/2006/11/29/84414.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]长尾理论的数学分析：真的彻底颠覆了二八法则？ </title><link>http://www.blogjava.net/zqli/archive/2006/11/27/83881.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Mon, 27 Nov 2006 12:51:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/11/27/83881.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/83881.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/11/27/83881.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/83881.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/83881.html</trackback:ping><description><![CDATA[
		<p>随着中信出版社引进出版 的<a href="http://club.book.csdn.net/book/123033.html" target="_blank"><font color="#0066ff">《长尾理论》</font></a>，关于这一Web 2.0以来最重要的概念又被大家如火如荼地炒作起来。概念是模糊的，科学是严谨的。虽然我之前就某些问题<a href="http://blog.csdn.net/zdg/archive/2005/08/12/451768.aspx" target="_blank"><font color="#0066ff">质疑过长尾理论</font></a>，本文试图通过数学方法来看看长尾理论是否真的彻底颠覆了二八法则？</p>
		<p>
				<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/zdg/258540/r_longtail.jpg" align="left" />长尾理论通常使用左边这张长尾曲线图来解释，头部是大热门，流行度曲线陡然下坠，但一直没有到零点。这个长长尾巴的价值就是长尾理论通篇讲述的核心。</p>
		<br />
		<br />
		<p>
				<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/zdg/258540/r_power-Law.jpg" align="right" />
				<br />《长尾理论》书中第110页中讲到“长尾就是一种幂率(power-law)曲线”，学过中学数学的都知道，幂率曲线就是类似f(x)=c/x的曲线，其中c为常量。大家看看确实和Chris Anderson描述的长尾曲线一模一样。</p>
		<p>有了这个前提，我们来看看长尾理论是否真的彻底颠覆了二八法则？首先，了解一下“二八法则”，“二八法则”又称“帕累托法则”，是意大利经济学家帕累托在19世纪末发现的经济规律，他发现在经济活动中，少数群体显得更为重要，比如：20%的人口掌握80%的财富、20%的产品产生80%的销售额等等。因此这个法则也称为“重要少数法则”。</p>
		<br />
		<br />
		<p>我们在任何一个地方截断长尾，比如x=5n的地方，这时候20%多数是x=n之前的部分。2个部分的总量分别是：<br /></p>
		<blockquote>总量 = c+c/2+c/3+c/4+...+c/5n<br />头部 = c+c/2+c/3+c/4+...+c/n</blockquote>
		<br />很显然，这2个部分构成都是数学中最常见的调合级数，我们知道调合级数是发散的。如何估算(1)和(2)的值并进而计算它们的比例呢？幸好著名的数学家Euler证明了<br /><blockquote>1+1/2+1/3+1/4+...+1/n = ln(n+1)+r</blockquote><br />其中r是一个常量，现在称为Euler常数，约为0.577218。这样，我们就得到长尾理论环境(丰饶经济)下，20%的头部所占的比例基本为：<br /><blockquote>头部/总量 = (ln(n)+r) / (ln(5n)+r) = (ln(n)+r) / (ln(n)+ln5+r)</blockquote><br />因为ln(n)是发散的，所以当n越来越大的时候，这个比率越来越接近于100%。形象一点，我们来计算几个值：<br /><table border="1"><tbody><tr><td>n</td><td>20%的头部比例</td></tr><tr><td>100</td><td>75.3%</td></tr><tr><td>1000</td><td>82.3%</td></tr><tr><td>10000</td><td>85.9%</td></tr></tbody></table><br />所以从数学计算上来说，长尾理论依然没有摆脱“重要少数法则”。 
<p> </p><p><font color="#ff0000">其实Chris Anderson也承认：“真正的80/20法则只是承认帕累托分布的有效性，承认某些东西卖得远比其他东西要好，这在长尾市场和传统市场中都是成立的。”所以，长尾理论彻底颠覆了二八法则是没有根据的。</font></p><p><font color="#ff0000">长尾理论不是颠覆性的概念，更多地是指导我们在丰饶经济的条件下，寻找合适的长尾市场，开拓新的销售渠道。所以Chris Anderson也重点谈到“即使有二八法则的统治，在丰饶经济环境下，我们也没有理由不去经营其它的80%产品”。或许，这就是对长尾理论最深刻的注解。</font></p><hr size="1" /><p><strong>数学小知识：欧拉常数的由来</strong></p><p>对于今天我们称为调和级数的<br /></p><blockquote>1+1/2+1/3+1/4+...</blockquote><br />很早就有数学家研究，比如中世纪后期的数学家Oresme在1360年就证明了这个级数是发散的。他的方法很简单：<br /><blockquote>1+1/2+1/3+1/4+1/5+1/6+1/7+1/8+... <br />1/2+1/2+(1/4+1/4)+(1/8+1/8+1/8+1/8)+...</blockquote><br />注意后一个级数每一项对应的分数都小数调合级数中每一项，而且后面级数的括号中的数值和都为1/2，这样的1/2有无穷多个，所以后一个级数是趋向无穷大的，进而调合级数也是发散的。 
<p> </p><p>随后很长一段时间，人们无法使用公式去逼近调合级数，直到无穷级数理论逐步成熟。1665年Newton(牛顿)在他的著名著作《流数法》中推导出第一个幂级数：<br /></p><blockquote>ln(1+x) = x - x<sup>2</sup>/2 + x<sup>3</sup>/3 - ...</blockquote><p> </p><p>Euler(欧拉)在1734年，利用Newton的成果，首先获得了调和级数有限多项和的值。结果是：<br /></p><blockquote>1+1/2+1/3+1/4+...+1/n = ln(n)+r (r为常量)</blockquote><br /><p>他的证明是这样的：<br />根据Newton的幂级数有：<br /></p><blockquote>ln(1+1/x) = 1/x - 1/2x<sup>2</sup> + 1/3x<sup>3</sup> - ...</blockquote><br />于是：<br /><blockquote>1/x = ln((x+1)/x) + 1/2x<sup>2</sup> - 1/3x<sup>3</sup> + ...</blockquote><br />代入x=1,2,...,n，就给出：<br /><blockquote>1/1 = ln(2) + 1/2 - 1/3 + 1/4 -1/5 + ...<br />1/2 = ln(3/2) + 1/2*4 - 1/3*8 + 1/4*16 - ...<br />......<br />1/n = ln((n+1)/n) + 1/2n<sup>2</sup> - 1/3n<sup>3</sup> + ...</blockquote><br />相加，就得到：<br /><blockquote>1+1/2+1/3+1/4+...1/n = ln(n+1) + 1/2*(1+1/4+1/9+...+1/n<sup>2</sup>) - 1/3*(1+1/8+1/27+...+1/n<sup>3</sup>) + ......</blockquote><br />后面那一串和都是收敛的，我们可以定义<br /><blockquote>1+1/2+1/3+1/4+...1/n = ln(n+1) + r</blockquote><br />Euler近似地计算了r的值，约为0.577218。这个数字就是后来称作的欧拉常数。不过遗憾的是，我们对这个常量还知之甚少，连这个数是有理数还是无理数都还是个谜。 
<p> </p><blockquote></blockquote><br /><br /><p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1416659</p><img src ="http://www.blogjava.net/zqli/aggbug/83881.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-11-27 20:51 <a href="http://www.blogjava.net/zqli/archive/2006/11/27/83881.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]在Rails中探索资源的世界——7月9日David Heinemeier Hansson演讲的翻译稿（部分） </title><link>http://www.blogjava.net/zqli/archive/2006/11/27/83872.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Mon, 27 Nov 2006 12:04:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/11/27/83872.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/83872.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/11/27/83872.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/83872.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/83872.html</trackback:ping><description><![CDATA[
		<strong>
				<font color="#800080">（译者按：   今年7月份举行的RailsConf 2006上，David Heinemeier Hasson作了一个主题演讲，很清楚地讲了Rails 1.2中对于REST的设计，以及REST风格给Web应用设计思想所带来的革新。我第一次看到这个视频，就认为这可能是对Web服务端开发具有历史意义的一次演讲。当时有一点时间，就一边听一边记，把这个演讲的开头翻译出将近3000字的内容，大约占整个演讲篇幅的1/4。后来我忙了起来，就没有时间把这个翻译做完。这个稿件在我硬盘上爬了两个多月，扔掉也不是，放出来又不完整。现在Rails 1.2已经发布了，我想越来越多的Web开发者都会回过头关心这个演讲的内容，所以突然生出一个想法，能不能把这个不完整的翻译稿放到自己的blog上，请有时间和精力的网友把翻译工作接力下去？<br /><br />    所以，我已经将自己翻译完成的开头部分（录像的1、2小节）放到这里，请有兴趣和热情的朋友对照录像内容把翻译接力下去，为国内的Web开发者介绍关于Web开发思想的这一重大革新。）<br /><br /></font>
		</strong>
		<font style="FONT-WEIGHT: bold" size="4">
				<span style="COLOR: rgb(255,0,0)">录像地址：</span>
				<a style="COLOR: rgb(255,0,0)" href="http://blog.scribestudio.com/articles/2006/07/09/david-heinemeier-hansson-railsconf-2006-keynote-address">在这里</a>
				<br style="COLOR: rgb(255,0,0)" />
		</font>
		<br />
		<font style="FONT-WEIGHT: bold; COLOR: rgb(255,0,0)" size="4">幻灯片地址：<a href="http://www.loudthinking.com/lt-files/worldofresources.pdf">在这里</a><br /></font>
		<br />
		<br />
		<font size="3">大家好，今晚我的演讲题目是《在Rails中探索资源的世界》。不过在我发表这个有点教程式的演讲之前，我想花几分钟来展示一下自己的傲慢。我总是要发表一些让人们不舒服的言论，现在这几乎已经是个传统了。<br /><br />这次的会议展示了过去6个月以来世界各地的Rails开发者们发现的最令人兴奋的东西，现在看来，我们这个小圈子之外的人们也终于开始关注Rails社群了，这当然很酷。但同时我们也必须想清楚，我们何以会获得如此的关注？我听到了Thomas昨天和今天的发言，当然他的很多想法和建议是非常棒的，不过在同时应该记住，<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,255)">之所以今天我们会在这里聚会，之所以Rails是今天的Rails，恰恰因为我们对很多事情说了“不”，恰恰是因为我们将很多人拒之门外。</span>如今Rails被越来越多的人接受，但我并不认为因此我们就可以背离先前的原则。所以，尽管我毫无疑问地支持Thomas的很多实用的建议，但对他的论调则不以为然。<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,255)">我不认为Rails应该向外部世界屈服，恰恰相反，Rails正在有力地让外部世界向我们屈服。</span>在这个演讲里，我正是要好好谈谈世界的问题。我是说，现实的世界。你们中的很多人大概都知道，我这个人从不觉得现实世界是个很舒服的地方，倒是对于理想世界情有独钟。Rails很大程度上就是生活在一个理想世界里，在这里，Rails没有那些该死的现实世界里的枷锁。可惜，人们必须生活在现实世界里，而生活在现实世界实在是相当悲哀。在现实世界里，你会被沿袭了数十年的陈规陋习拖入深渊，这决不是Rails的成长之道，也不会是它未来的命运。我稍后会回到这个观点。<br /><br />还是先来报报喜。我最近去了一趟日本，那里发生的事情让我很感兴趣。在这里，我们有大约三、五百人聚在一起，代表西方世界的Rails用户群。而在日本，Ruby的用户群数量庞大，热情高涨，他们做了大量的Ruby和Rails相关的工作，其中有很多我闻所未闻，比我们这个小房间里的人们所做的工作要多得多。他们正在创建更好几个理想的世界，大大超越我曾经梦想的那个世界。Thomas和我写的那本书自去年发行以来，已经买出5万多册，这经常被我们用来标志Rails的成功。而在日本，这本书刚刚翻译出版几个月，已经销售7千多册，他们还有3本日文书即将出版。在英语世界，到年底的时候大约还会有十本书上市，这都令人感到兴奋。从那些长时间使用Rails的团队那里得来的消息同样令人兴奋。我多次提到的43things.com团队，他们大规模应用了Rails，并且在面向公众的站点平台上进行了高负载量的测试。上次我问他们的时候，他们的Rails应用每天要产生350万动态网页，这已经是很了不起的事情！当然，这个演讲并不打算花更多的时间来自吹自擂，这个演讲的主题是有关CRUD的。<br /><br />CRUD -- Create，Read，Update和Delete。这几个词汇概括了我们的主要的工作，这几个基本的概念概括了我们对对象空间中对象或者数据库表wrapper所能够的主要操作。但CRUD是有问题的。有什么问题呢？CRUD的问题是它的名字起得不好。不光名字起得不好，名声也不太好。他们是怎么说CRUD的呢？首先，他们说CRUD太简单，仅靠这四个操作，别指望能做出什么有趣的事情，世界太复杂了，不是这四个动词所能够描述的，所以CRUD太简单。正因为CRUD太简单，所以它们无法胜任真实工作。如果你只是用CRUD的话，你不可能把事情做到位。CRUD不是一种令人满意的方式，它不能够把人类了不起的智慧充分发挥出来。他们说，这不值得，你不应该把你的精力浪费在这四个动词上，它们太简单了。用CRUD应该感到羞愧。<br /><br />我要说的是，他们错了。我今天的演讲就是要消除大家对CRUD的担忧，并且让大家像我一样学会爱上CRUD。<br /><br />在对象的世界里，我们CRUD。而在数据库的世界里，我们也有四种基本操作，SELECT，INSERT，UPDATE，DELETE。不过数据库世界中的这四种操作存在已经好多年了，而且关于CRUD过于简单的说法，很大程度上就是在跟数据库这四大操作的对比中产生的。所以这并没有使我深入的思考CRUD问题。促使我深入思考CRUD的是HTTP。<br /><br />近年来，我们经历了一次文艺复兴（Renaissance），一次HTTP的文艺复兴，HTTP有四个动词，GET，POST，PUT和DELETE，从而在上面的这个CRUD栈之上添加了崭新的一层。然而我们大多数人只使用GET和POST来思考HTTP和Web，而没有进而想到，<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,255)">HTTP的四个动词已经使之成为CRUD的一种新形式。我</span>本人对此深感内疚，因为多年来我自欺欺人地认为HTTP只有GET和POST。正因为此，我才会占用各位一小时来讲述下面的内容。<br /><br /><span style="FONT-WEIGHT: bold; COLOR: rgb(0,128,128)">&lt;第8页&gt;</span><br /><br />请看，这是现在一个CRUD应用程序对外暴露功能的方式。当你想创建某个东西，你想一个特定的URL地址POST；当你想获取对象的内容，就把相关资源的位置放到URL里，然后GET；当你想改变这个对象，就用POST，有些人也用GET操作做这件事，其实这很不好。再有就是删除操作，也是用POST。<br /><br />看着这样一幅图，有时我会觉得有点抓狂。我们在Rails中的一个宗旨是DRY，决不做重复的工作。你看看这里的动词，GET, POST，再看看这里的URL，我们所做的不正是重复性工作吗？看看第二行，我们说要GET第1个people，但是这个people的URL中包含show，GET和show，这两者不正是同样的意思吗？显然我们把一些事情做错了。之所以会把这些事情做错，根本上是因为我们没有把HTTP提供的CRUD操作利用好。如果我们能利用好，我们完全可以把事情做得清爽、漂亮，像这样：<span style="FONT-WEIGHT: bold; COLOR: rgb(51,153,102)">&lt;第9页&gt;</span><br style="FONT-WEIGHT: bold; COLOR: rgb(51,153,102)" /><br />现在，URL只是标识了我们所关注的那个对象本身，而我们要对对象所做的操作则用四个动词来表达。之前，我们把操作和操作的对象混在一起，现在则明确地分开。这显然漂亮多了，但是为什么我们先前没有这么做呢？为什么HTTP的这部分能力一直被遗忘在角落里呢？这自然是有原因的。原因就是，要这么做会很痛苦，因为HTML以及Web世界里的其他现存的东西都没有欣赏到HTTP中已经存在的这种美，更没有为此做出相应的设计实现。既然Rails框架的目标把这些累赘东西踢走，是深埋于下的美妙的概念暴露在世人面前，那么为什么我们不能够试着来解决这个问题？这就是我今天要讲的东西，如何把上面那样重复的累赘的形式变成下面这个清爽漂亮的形式。事实上，这不仅仅是一个URL漂亮与否的问题。<br /><br />在Rails 1.2中，如果你想把某个资源暴露出来，使客户能够用那种清爽的URL的方式去访问和操作资源，你只需要做这样的事情<strong><font color="#339966">：&lt;第10页&gt;<br /></font></strong><br />这一语句将person作为一个资源，允许上述那种URL直接被映射到对应的方法。<br /><br />（之下有一段幻灯片内容的解释，略过）。<br /><br />怎么做到这一点呢？首先要增加PUT并将其传递给控制器的能力。但正如我之前所说，由于HTML天然地没有PUT的能力，所以这不太容易。没关系，我们要修正这一点。<br /><br /><font color="#339966"><strong>&lt;第11页&gt;</strong></font><br /><br />首先是POST和GET，跟以前一样，所以没什么要特别说出的。有趣的部分是Update和Destroy。在Update部分，我们要找到一种方法告诉Rails，这个表单的action不是一个常规的POST方法，而是一个PUT。这里展示的是这个操作应该的模样。如果HTML表单支持PUT方法的话，我们本该这样写来着。很不幸，事实并非如此（HTML表单不支持PUT action），所以我们只能用POST来伪造一个PUT。在Rails中，当你这样写的时候，产生出来的表单里包含了一个隐藏的域，称为underscored method（下划线方法），这个下划线方法会去调用真正干事的那个方法。我们这么做就能让Rails相信，这个POST实际上是个PUT。<br /><br /><span style="FONT-WEIGHT: bold; COLOR: rgb(128,0,0)">（以上翻译是录像1、2节内容，请热心网友接力翻译后面的内容）</span></font>
		<br /> <br /><br /><p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1413933</p><img src ="http://www.blogjava.net/zqli/aggbug/83872.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-11-27 20:04 <a href="http://www.blogjava.net/zqli/archive/2006/11/27/83872.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是SNS？</title><link>http://www.blogjava.net/zqli/archive/2006/11/24/83293.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Fri, 24 Nov 2006 08:12:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/11/24/83293.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/83293.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/11/24/83293.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/83293.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/83293.html</trackback:ping><description><![CDATA[     （解一：）   SNS是一个采用分布式技术，通俗地说是采用P2P技术，构建的下一代基于个人的网络基础软件。 
<p>　　SNS通过分布式软件编程，将现在分散在每个人的设备上的CPU、硬盘、带宽进行统筹安排，并赋予这些相对服务器来说很渺小的设备更强大的能力。这些能力包括:计算速度，通信速度，存储空间。</p><p>　　SNS的技术起源:在互联网中，PC机、智能手机都没有强大的计算及带宽资源，它们依赖网站服务器，才能浏览发布信息。如果将每个设备的计算及带宽资源进行重新分配与共享，这些设备就有可能具备比那些服务器更为强大的能力。这就是分布计算理论诞生的根源，是SNS技术诞生的理论基础。</p><p>　　SNS的商业空间:当普通人通过安装SNS软件都可以拥有媲美网站服务器的计算及通信资源时，那些投资了大量服务器的互联网公司将怎么办呢?他们的优势在什么地方?会不会有更多的新型的互联网公司出现，而且他们的后台他们的前端有没有可能完全不是现在的GOOGLE、EBAY、新浪模式呢?甚至包括盛大网络游戏这样的运营商，他们引为骄傲的强大的3万台服务器集群，是不是他们的核心竞争力呢?当一个漫画作者家里的那台机器，就可以让他通过SNS视频器播放他的作品，他还需要去管理一个网站吗?或许一个家庭主妇不需要懂得HTML编程，不需要懂得网站这个词汇，只通过SNS菜谱发布程序及一台厨房里的PC就能让千百万人掌握她的手艺，而且她在厨房的灶台上的一招一式都清晰可见。这个时候，您会想到什么?</p><p>　　现在的互联网中，作为客户端的我们就像个蠢蛋，只能通过服务器才能干些奴隶般的事情，看别人的网站，玩别人的游戏，发发邮件，除此之外，我们没有自由。现在是开始革命的时候了!革命中心任务就是:如何让10多亿台电脑发挥他们自己的作用，让用户去创造和控制自己的信息。中间不需要公司的服务器来摆布我们。<br /><br /> <br />         （解二：）<br />         SNS: Social Network Sofwaret，社会性网络软件。依据六度关系理论，以认识朋友的朋友为基础，扩展自己的人脉。并且无限扩张自己的人脉，在需要的时候，可以随时获取一点，得到该人脉的帮助。<br /><br />         从2003年3月起，SNS网站悄然从美国兴起,短短的五个月内SNS就风靡整个北美地区。 据统计，在硅谷工作的三人中就有一个人使用SNS来拓展自己的交际圈。 SNS网站也受到了风险投资的追捧，有些SNS网站也获得了巨额的投资。<br /><br />         在国内，这股旋风也吹得正猛，提供SNS服务的网站如雨后春笋般破土而出。 而SNS之所以走俏是人们对网络应用需求变化驱动使然。 随着网络社会化应用的发展，网民对网络的要求越来越高，不再仅仅局限于娱乐等方面，更希望网络能对工作、个人的发展提供更加便捷、高效的支撑和帮助。<br /><br />         SNS的中文含义是“社交网络”。顾名思义，它就是社交关系的网络化。将我们现实中的社会圈子搬到网络上，根据不同的条件建立属于自己的社交圈子。 通过朋友认识朋友的形式，迅速建立起一个自己的基于信任的朋友圈子。在这个圈子里，相互之间具有较高的诚信度，区别于第一代交友模式的满无目的性。<br /><br />         SNS可称为“第二代交友模式”。在这种模式下，结交的都是相对可靠的朋友，由于用户可以搜索的对象都是起朋友的朋友，因而从诚信和安全的角度上来看，它给了用户更大的信心和保障。此外，在SN中，不经朋友介绍和用户确认，用户的个人资料是不能被陌生人看到的。因此，对个人的隐私的保障性增强了。<br /></p><img src ="http://www.blogjava.net/zqli/aggbug/83293.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-11-24 16:12 <a href="http://www.blogjava.net/zqli/archive/2006/11/24/83293.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>收集PDF-&gt;WORD</title><link>http://www.blogjava.net/zqli/archive/2006/11/16/81442.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Thu, 16 Nov 2006 01:55:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/11/16/81442.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/81442.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/11/16/81442.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/81442.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/81442.html</trackback:ping><description><![CDATA[                                                                       Office2003实现PDF文件转Word文档<br />        可以利用<font color="#0066cc"><a class="bluekey" href="http://soft.yesky.com/office/" target="_blank">Office</a> 2003</font>中的<font color="#0066cc">Microsoft Office Document Imaging</font>组件来实现PDF转WORD文档，也就是说利用WORD来完成该任务。方法如下：
<p>　　用Adobe Reader<font color="#0066cc">打开想转换的PDF文件</font>，接下来<font color="#0066cc">选择</font>“文件→<a class="bluekey" href="http://oa.yesky.com/" target="_blank">打印</a>”菜单，在打开的“打印”窗口中将<font color="#0066cc">“打印机”栏中的名称设置为</font>“Microsoft Office Document Image Writer”，确认后将该PDF文<font color="#0066cc">件输出为</font>MDI格式的<font color="#0066cc">虚拟打印文件</font>。</p><p>　　<strong>注:</strong>如果没有找到“Microsoft Office Document Image Writer”项，使用Office 2003安装光盘中的“添加/删除组件”更新安装该组件，选中“Office 工具 Microsoft DRAW转换器”。</p><p>　　然后，<font color="#0066cc">运行</font>“Microsoft Office Document Imaging”，并利用它来<font color="#0066cc">打开</font>刚才保存的MDI文件，选择“工具→<font color="#0066cc">将文本发送到Word</font>”菜单，在弹出的窗口中选中“<font color="#0066cc">在输出时保持<a class="bluekey" href="http://pic.yesky.com/" target="_blank">图片</a>版式不变</font>”，确认后系统会提示“必须在执行此操作前重新运行OCR。这可能需要一些时间”，不管它，<font color="#0066cc">确认</font>即可。</p><p>　　<strong>注:</strong>对PDF转DOC的识别率不是特别完美，转换后会丢失原来的排版格式，所以转换后还需要手工对其进行排版和校对工作。</p><p>　　以上仅在word2003中可用，其他版本没有Microsoft Office Document Image Writer。<br /><br />                                                                      攻无不克的PDF转Word<br /><br />论坛中谈到很多PDF转换Word的方法，但有些PDF文档本身的制作过程中并不是以文字方式进行制作的，因而利用该方法仍不能进行转换。这里通过利用文字识别软件的功能进行“曲线转换”。<br />    软件需要：Adobe Acrobat Pro(注不是Reader)，识别软件(如汉王文本等)，Word<br /><br />    方法：<br />    Step 1<br />    用Adobe Acrobat Pro打开该PDF文档<br />    点击File—Save As<br />    在弹出窗口中保存类型选取“Jpeg”<br /><br />    Step 2<br />    打开Word程序，并新建一空白文件备用<br /><br />    Step 3<br />    打开OCR程序，打开刚保存的Jpeg文档<br />    点击“版面分析”<br />    点击“文字识别”<br />    可在编辑窗口中进行更正编辑<br />    点击“插入Word文档”<br /><br />    Step 4<br />    转到Word中，进行稍微的排版<br />    即可 </p><p>    Step 1 转换为Jpeg文档的操作( Gif动画 )<br /></p><center> </center><p>    另：<br />     1.如果论文写作时需要大量引用部分图书，利用数码相机拍摄相关页面，放入OCR中一样可以识别转换成Word文档，这对没有扫描仪的我们相当有用<br /><br />    2.其它诸如”ScanSoft PDF Converter for Microsoft Word v1.0“、”PDF2DOC“对某些PDF文档并不能识别与转换<br /><br />    3.注意：此方法仅是”曲线转换“，如觉麻烦，请告知更好方法<br /><br />    Step 2-3  Jpeg文档识别与Word文档l转换(省略Step 3 中“更正编辑“)<br />    Step 4 略</p><center><br /><br /><br /><br />微软Office文档格式的转换可能是朋友们比较关心的问题。尤其是PDF转成Word的DOC格式，或者把Word的DOC文档转成PDF文档用得最为广泛。可能大家不知道，除了DOC与PDF的转换和Office办公文档格式之间的相互转换外，Office文档还能转成其它一些文件格式。大家一起来看看吧。 
<table width="100%" border="0"><tbody><tr><td height="1"> </td></tr></tbody></table><table cellpadding="9" width="100%" border="0"><tbody><tr class="xr"><td bgcolor="#b5b500"><font face="黑体" size="4">Office文档之间的转换</font></td></tr></tbody></table><table width="100%" border="0"><tbody><tr><td height="1"> </td></tr></tbody></table>　　微软Office有很多种文档格式，DOC、XLS、PPT、TXT等等。要把他们相互转换，可以用“文件”菜单下的“另存为”选项，只要选项中有对应选项，就可以直接转。 <br />　　但并非每种文档都能直接相互转换。比如，DOC就不能直接另存为PPT。这就需要用到其它方法。我们举出以下一些常用的转换方法： 
<table width="100%" border="0"><tbody><tr><td height="1"> </td></tr></tbody></table><table cellspacing="0" cellpadding="9" width="100%" border="0"><tbody><tr><td><a href="http://soft.yesky.com/office/463/2019463.shtml" target="_blank"><font color="#002c99">Word文档转PPT</font></a>：</td><td><a href="http://soft.yesky.com/office/463/2019463.shtml"><font color="#002c99">这里是用Word中的“发送到”命令来实现Word转PPT</font><font color="#ff0000">[全文]</font></a></td></tr><tr><td><a href="http://soft.yesky.com/414/2017914.shtml" target="_blank"><font color="#002c99">PPT转Word文档：</font></a></td><td><a href="http://soft.yesky.com/414/2017914.shtml"><font color="#002c99">这也是用“发送到”命令来实现转换</font><font color="#ff0000">[全文]</font></a></td></tr><tr><td><a href="http://soft.yesky.com/office/49/2238549.shtml" target="_blank"><font color="#002c99">快速将Word转换为PPT：</font></a></td><td><a href="http://soft.yesky.com/office/49/2238549.shtml"><font color="#002c99">用“插入”的方法也能实现Word转PPT</font><font color="#ff0000">[全文]</font></a></td></tr><tr valign="top"><td>Excel转Word：</td><td>Excel表格想变成Doc文档，只需把需要的单元格选中并复制，再粘贴到Word中保存就可以了。</td></tr><tr valign="top"><td width="160">Word转Excel：</td><td>这里主要是指Word中的表格转成Excel文件。也是用复制粘贴的方法就能快速实现。</td></tr><tr valign="top"><td><a href="http://soft.yesky.com/office/58/2012058.shtml"><font color="#002c99">Word与WPS文档的转换： </font></a></td><td><a href="http://soft.yesky.com/office/58/2012058.shtml"><font color="#002c99">姑且把WPS与DOC文档的转换放到这里，因为WPS文档格式现在已经与Office全兼容了嘛。</font><font color="#ff0000">[全文]</font></a></td></tr></tbody></table><table width="100%" border="0"><tbody><tr><td height="1"> </td></tr></tbody></table><table cellpadding="9" width="100%" border="0"><tbody><tr class="xr"><td bgcolor="#b5b500"><font face="黑体" size="4">Word与PDF之间的转换</font></td></tr></tbody></table><table width="100%" border="0"><tbody><tr><td height="1"> </td></tr></tbody></table>　 　Word与PDF的转换有很多方法，包括第三方工具软件转换、复制粘贴、另存为等。我们归纳几条最常的方法： 
<table width="100%" border="0"><tbody><tr><td height="1"> </td></tr></tbody></table><table cellspacing="0" cellpadding="9" width="100%" border="0"><tbody><tr valign="top"><td width="160"><a href="http://soft.yesky.com/office/365/2075865.shtml" target="_blank"><font color="#002c99">Office组件把PDF转成Word</font></a>：</td><td><a href="http://soft.yesky.com/office/365/2075865.shtml"><font color="#002c99">Office有个组件叫 Document Imaging，它能完成这一工作。</font><font color="#ff0000">[全文]</font></a></td></tr><tr valign="top"><td><a href="http://soft.yesky.com/office/472/2162472.shtml"><font color="#002c99">利用第三方工具软件</font></a>：</td><td><a href="http://soft.yesky.com/office/472/2162472.shtml"><font color="#002c99">ScanSoft PDF Converter For Microsoft Word 这款软件可以方便地把PDF文档转为Word文档。</font><font color="#ff0000">[全文]</font></a></td></tr><tr valign="top"><td><a href="http://dev.yesky.com/msdn/123/2101623.shtml" target="_blank"><font color="#002c99">ASP.Net实现将Word转换PDF格式</font></a>：</td><td><a href="http://dev.yesky.com/msdn/123/2101623.shtml"><font color="#002c99">用编程的方法也能实现目标。不过可能要高级玩家才用得上这一种方法了。</font><font color="#ff0000">[全文]</font></a></td></tr><tr valign="top"><td><a href="http://www.yesky.com/109/1816609.shtml" target="_blank"><font color="#002c99">Word与PDF的互转：</font></a></td><td><a href="http://www.yesky.com/109/1816609.shtml"><font color="#002c99">光是PDF转Word也不行，有时还要把Word转成PDF。这里就有一个方法……</font><font color="#ff0000">[全文]</font></a></td></tr></tbody></table><table width="100%" border="0"><tbody><tr><td height="1"> </td></tr></tbody></table><table cellpadding="9" width="100%" border="0"><tbody><tr class="xr"><td bgcolor="#b5b500"><font face="黑体" size="4">其它形式的转换</font></td></tr></tbody></table><br />　　办公文档不光可以转成办公文档，还能转成其它一些格式： 
<table width="100%" border="0"><tbody><tr><td height="1"> </td></tr></tbody></table><table cellspacing="0" cellpadding="9" width="100%" border="0"><tbody><tr valign="top"><td width="160"><a href="http://soft.yesky.com/office/255/2018755.shtml"><font color="#002c99">将PPT文稿保存为图片： </font></a></td><td width="69%"><a href="http://soft.yesky.com/office/255/2018755.shtml"><font color="#002c99">这是用另存为的方法把PPT文档存为GIF动画图片。</font><font color="#ff0000">[全文]</font></a></td></tr><tr valign="top"><td><a href="http://soft.yesky.com/office/122/2296622.shtml" target="_blank"><font color="#002c99">Excel图表另存为GIF文件</font></a>：</td><td><a href="http://soft.yesky.com/office/122/2296622.shtml"><font color="#002c99">用宏代码能把Excel图表存成GIF动画图片。</font><font color="#ff0000">[全文]</font></a></td></tr><tr valign="top"><td><a href="http://soft.yesky.com/37/2216037.shtml"><font color="#002c99">Excel做成EXE可执行文件： </font></a></td><td><a href="http://soft.yesky.com/37/2216037.shtml"><font color="#002c99">不信？看了您就相信了，Excel真的可以变成可执行文件哟！</font><font color="#ff0000">[全文]</font></a></td></tr><tr valign="top"><td><a href="http://tools.yesky.com/67/2220567.shtml"><font color="#002c99">全能文档专家转换多种文档</font></a>：</td><td><a href="http://tools.yesky.com/67/2220567.shtml"><font color="#002c99">传说中可以让多种文档随意转的小工具，不过效果可能不那么尽如人意。</font><font color="#ff0000">[全文]</font></a></td></tr></tbody></table></center><img src ="http://www.blogjava.net/zqli/aggbug/81442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-11-16 09:55 <a href="http://www.blogjava.net/zqli/archive/2006/11/16/81442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习笔记-杂集</title><link>http://www.blogjava.net/zqli/archive/2006/10/31/78309.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Tue, 31 Oct 2006 08:26:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/10/31/78309.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/78309.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/10/31/78309.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/78309.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/78309.html</trackback:ping><description><![CDATA[容器（container）：指应用代码的运行框架。应用对象（大多数时候是业务对象）在容器里运行，这也就是我们所说的“被容器管理”，EJB就是过去管理J2EE业务对象时最常用的容器。而J2EE的WEB容器则比较特殊，它是用语管理servlet及其相关依赖对象的。<br /><br />“对象”表示运行在容器中的对象，一组协作的对象通常被称为“组件”。举例：EJB通常被称为组件（而不是对象）。当一个对象被容器管理起来时，它就多少有些类似一个组件-它拥有了组件最重要特征：可以切换成另一个实现，只要后者满足同样的契约（contract）即可。这里的“对象”和粒度无关。<br /><br />一个“轻量级容器”，应该具有下列特性：可以管理应用代码，而又不给应用代码强加对容器的依赖。例如，应该可以无须修改地将遗留代码引入容器。我们把这种特性叫做“非侵入性”：除非绝对必须，否则基础设施不应该把对容器的依赖强加给应用代码。这也使应用对象既可以在容器内，又可以在容器外运行，达到容器无关性。<br /><br />所有EJB（甚至包括本地的EJB）的粒度都必须相当粗；EJB组件不支持继承，仅仅允许EJB实现类的继承。<br /><br />“企业级应用”的范畴相当宽泛，从只访问一个数据库的Web应用，知道高度事务性，以中间件为核心，需要访问多个资源，甚至可能用到RMI基础上的内部分布和异步消息机制的应用程序。<br /><br />Spring是一个应用框架，而不是Web框架、IOC框架，AOP框架或者中间层框架什么的，Spring由多个子框架组成，而且这些框架都相对独立。Spring 支持对EJB的访问，使用动态代理技术来实现无须编码的客户端业务代表（business delegate）因此，“是否使用本地无状态Session bean”就完全成了一种实现选择，而不是架构选择。也就是说如果你想使用EJB，你可以在统一的架构体系中使用，却不需要再让EJB成为你的架构基础。<br /><br />AOP最有价值的用途就是在业务方法上提供通用的企业级服务。譬如声明性事务管理和声明性安全检查等。AOP影响的仅仅是我们使用J2EE服务的方式。在它的封装之下，我们仍然可以使用应用服务器的核心功能，譬如JTA。容器管理事务（CMT）。<br /><br />如果应用系统在逻辑上分为三层结构：一个WEB层，一个业务对象层，一个数据访问层，整个应用系统运行在同一个JVM中。在这样一种分层的架构中，事务管理属于业务对象层。通常在业务门面中划分，数据访问层与事务过程。但是并不是管理事务，在数据访问层做不同方法调用可以参与到一个事务过程中 。<br /><br />全局事务管理的底层基础设施是由容器实现的JTA，而全局事务管理往往使用EJB CMT。EJB CMT只不过是访问容器事务协调器的一种方式而已。此外，也可以直接使用JTA。<br /><br />X/Open XA规范：XA定义了事务管理器和资源管理器的底层协议，定义了参与事务的资源的底层协议，以及两阶段提交的其他特殊情况的底层协议。<br /><br />编程式事务管理：使用JTA通过JNDI获取；声明式事务管理：通过使用组件模型（即EJB CMT），这是一种建立在JTA基础设施之上的高层的服务。<br /><br />JAVA连接器架构（the java connector architecture）：提供了无缝插入容器事务和资源池基础设施的手段。通过标准的接口，允许任何资源参与全局分布式容器事务。<br /><br />对于集合查询和批量更新操作来说，直接使用关系型操作非常合适，关系型数据库可以非常高效地处理这些操作。<br /><br />客户端通常不可能对远程异常进行有效的处理，因此常见的做法是将其沿着调用栈一直向上抛，由一个通用的基础模块来统一处理。<img src ="http://www.blogjava.net/zqli/aggbug/78309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-10-31 16:26 <a href="http://www.blogjava.net/zqli/archive/2006/10/31/78309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习笔记-设计模式之Singleton(单态)</title><link>http://www.blogjava.net/zqli/archive/2006/10/30/78072.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Mon, 30 Oct 2006 08:12:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/10/30/78072.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/78072.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/10/30/78072.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/78072.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/78072.html</trackback:ping><description><![CDATA[
		<p>
				<strong>单态定义</strong>:<br />Singleton模式主要作用是保证在Java应用程序中，一个类Class只有一个实例存在。 </p>
		<p>在很多操作中，比如建立目录 数据库连接都需要这样的单线程操作。</p>
		<p>还有, singleton能够被状态化; 这样，多个单态类在一起就可以作为一个状态仓库一样向外提供服务，比如，你要论坛中的帖子计数器，每次浏览一次需要计数，单态类能否保持住这个计数，并且能synchronize的安全自动加1，如果你要把这个数字永久保存到数据库，你可以在不修改单态接口的情况下方便的做到。</p>
		<p>另外方面，Singleton也能够被无状态化。提供工具性质的功能，<br /><br />Singleton模式就为我们提供了这样实现的可能。使用Singleton的好处还在于可以节省内存，因为它限制了实例的个数，有利于Java垃圾回收（garbage collection）。<br /><br />我们常常看到工厂模式中类装入器(class loader)中也用Singleton模式实现的,因为被装入的类实际也属于资源。<br /></p>
		<p>
				<strong>如何使用?</strong>
				<br />一般Singleton模式通常有几种形式:</p>
		<table cellspacing="3" cellpadding="3" width="100%" border="0">
				<tbody>
						<tr>
								<td bgcolor="#cccccc">
										<p>public class Singleton {</p>
										<p>　　private Singleton(){}</p>
										<p>　　//在自己内部定义自己一个实例，是不是很奇怪？<br />　　//注意这是private 只供内部调用</p>
										<p>　　private static Singleton instance = new Singleton();</p>
										<p>　　//这里提供了一个供外部访问本class的静态方法，可以直接访问　　<br />　　public static Singleton getInstance() {<br />　　　　return instance; 　　<br />　　 } <br />} </p>
										<p> </p>
								</td>
						</tr>
				</tbody>
		</table>
		<p>第二种形式:</p>
		<table cellspacing="3" cellpadding="3" width="100%" border="0">
				<tbody>
						<tr>
								<td bgcolor="#cccccc">public class Singleton { 
<p>　　private static Singleton instance = null;<br /><br />　　public static synchronized Singleton getInstance() {<br /><br />　　//这个方法比上面有所改进，不用每次都进行生成对象，只是第一次　　　 　<br />　　//使用时生成实例，提高了效率！<br />　　if (instance==null)<br />　　　　instance＝new Singleton();<br />　　return instance; 　　} </p><p>} </p><p> </p></td>
						</tr>
				</tbody>
		</table>
		<p>使用Singleton.getInstance()可以访问单态类。</p>
		<p>上面第二中形式是lazy initialization，也就是说第一次调用时初始Singleton，以后就不用再生成了。</p>
		<p>注意到lazy initialization形式中的synchronized，这个synchronized很重要，如果没有synchronized，那么使用getInstance()是有可能得到多个Singleton实例。关于lazy initialization的Singleton有很多涉及double-checked locking (DCL)的讨论，有兴趣者进一步研究。</p>
		<p>一般认为第一种形式要更加安全些。<br /></p>
		<p>
				<strong>使用Singleton注意事项</strong>：<br />有时在某些情况下，使用Singleton并不能达到Singleton的目的，如有多个Singleton对象同时被不同的类装入器装载；在EJB这样的分布式系统中使用也要注意这种情况，因为EJB是跨服务器，跨JVM的。</p>
		<p>我们以SUN公司的宠物店源码(Pet Store 1.3.1)的ServiceLocator为例稍微分析一下：<br /><br />在Pet Store中ServiceLocator有两种，一个是EJB目录下；一个是WEB目录下，我们检查这两个ServiceLocator会发现内容差不多，都是提供EJB的查询定位服务，可是为什么要分开呢？仔细研究对这两种ServiceLocator才发现区别：在WEB中的ServiceLocator的采取Singleton模式，ServiceLocator属于资源定位，理所当然应该使用Singleton模式。但是在EJB中，Singleton模式已经失去作用，所以ServiceLocator才分成两种，一种面向WEB服务的，一种是面向EJB服务的。</p>
		<p>Singleton模式看起来简单，使用方法也很方便，但是真正用好，是非常不容易，需要对Java的类 线程 内存等概念有相当的了解。</p>
		<p>总之：如果你的应用基于容器，那么Singleton模式少用或者不用，可以使用相关替代技术。</p>
		<p>
		</p>
		<p>进一步深入可参考：</p>
		<p>
				<a href="http://www-106.ibm.com/developerworks/java/library/j-dcl.html?dwzone=java" target="_blank">Double-checked locking and the Singleton pattern</a>
		</p>
		<p>
				<a href="http://www.javaworld.com/javaworld/jw-01-2001/jw-0112-singleton-p3.html#resources" target="_blank">When is a singleton not a singleton?</a>
		</p>
<img src ="http://www.blogjava.net/zqli/aggbug/78072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-10-30 16:12 <a href="http://www.blogjava.net/zqli/archive/2006/10/30/78072.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《CSS网站布局实录》读书笔记</title><link>http://www.blogjava.net/zqli/archive/2006/10/19/76196.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Thu, 19 Oct 2006 08:02:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/10/19/76196.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/76196.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/10/19/76196.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/76196.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/76196.html</trackback:ping><description><![CDATA[class作为一种专门对于样式定义的属性，不同于id，除了在使用上可以多个元素同时使用一个class名称之外，甚至可以同一个元素使用多个class样式。使用方法是在XHTML中的class定义时，使用空格分隔多个样式的名称：<br /><br />&lt;div class="c1 c2 c3"&gt;示例文本&lt;/div&gt;<br /><br />在使用c1，c2，c3的样式中，我们在c2中定义了字体兰色，c3中定义了字体红色，而最终显示的是c3的红色样式。这就说明了有关多样式同时使用的优先问题，对于这样的多样式定义，后面的样式总是能够覆盖前面的样式进行最终的显示，而且只是覆盖相同的属性，如c3的红色覆盖了c2中的蓝色。这种覆盖模式不仅仅值得我们编码上的注意，而且也能够为样式设置提供更丰富的编写方式，我们可以实际基于默认样式的改变，前者定义默认样式，后者通过属性参数的覆盖进行改变。<br /><br />div vs span<br /><br />        对于XHTML中的每一个对象而言，都拥有自己默认的显示模式，div对象的默认显示模式是display:bloc；因为这样的默认模式，从而使用div成为一个块状容器，其默认状态就将占据一整行的空间。而span对象的默认显示模式为display:inline；因为span将作为一个行间内联对象显示时以行内连接的方式进行显示。<br />        正是由于两个对象不同的显示模式，因此在实际使用过程决定了两个对象的不同用途。div对象的任务是呈现一个块状内容，如一大段文本，一个导航区域，一个页脚区域等显示为块状的内容进行结构编码并进行样式设计；而作为内联对象的span，用途是对行内元素进行结构编码以方便样式设计，span默认状态下就不会破坏行中元素的显示顺序，例如在一大段文本中，我们需要改变其中一段文本的颜色，可以将这一小部分文本使用span对象，并进行样式设计。span对象是专门用于设计样式的一种内联对象。<img src ="http://www.blogjava.net/zqli/aggbug/76196.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-10-19 16:02 <a href="http://www.blogjava.net/zqli/archive/2006/10/19/76196.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>.NET Framework 学习笔记</title><link>http://www.blogjava.net/zqli/archive/2006/07/10/57477.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Mon, 10 Jul 2006 05:59:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/07/10/57477.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/57477.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/07/10/57477.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/57477.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/57477.html</trackback:ping><description><![CDATA[
		<h1 class="heading">类型的类别</h1>
		<div class="seeAlsoNoToggleSection" id="sectionSection0">
				<p>通用类型系统支持两种一般类别的类型，每一类都细分成子类别： </p>
				<ul>
						<li>
								<p>值类型 </p>
								<p>值类型直接包含它们的数据，值类型的实例要么在堆栈上，要么内联在结构中。值类型可以是内联的（由运行库实现）、用户定义的或枚举的。有关内联值类型的列表，请参见 <a onclick="javascript:TrackThisClick('ctl00_LibFrame_ctl02','ctl00_LibFrame_ctl03',this);" href="http://msdn2.microsoft.com/zh-cn/library/hfa3fa08.aspx">.NET Framework 类库</a>。 </p>
						</li>
						<li>
								<p>引用类型 </p>
								<p>引用类型存储对值的内存地址的引用，位于堆上。引用类型可以是自描述类型、指针类型或接口类型。引用类型的类型可以由自描述类型的值来确定。自描述类型进一步细分成数组和类类型。类类型是用户定义的类、装箱的值类型和<a onclick="javascript:TrackThisClick('ctl00_LibFrame_ctl02','ctl00_LibFrame_ctl04',this);" href="http://msdn2.microsoft.com/zh-cn/library/96b1ayy4.aspx">委托</a>。 </p>
						</li>
				</ul>
				<p>
						<font color="#ff0000">作为值类型的变量，每个都有自己的数据副本，因此对一个变量的操作不会影响其他变量。作为引用类型的变量可以引用同一对象；因此对一个变量的操作会影响另一个变量所引用的同一对象。</font>
				</p>
		</div>
<img src ="http://www.blogjava.net/zqli/aggbug/57477.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-07-10 13:59 <a href="http://www.blogjava.net/zqli/archive/2006/07/10/57477.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]SQL Server一些常见性能问题的总结</title><link>http://www.blogjava.net/zqli/archive/2006/07/02/56145.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Sun, 02 Jul 2006 04:04:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/07/02/56145.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/56145.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/07/02/56145.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/56145.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/56145.html</trackback:ping><description><![CDATA[
		<p xmlns="http://www.w3.org/1999/xhtml">1.对查询进行优化，应尽量避免全表扫描，首先应考虑在 where 及 order by 涉及的列上建立索引。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">2.应尽量避免在 where 子句中对字段进行 null 值判断，否则将导致引擎放弃使用索引而进行全表扫描，如：<br />select id from t where num is null<br />可以在num上设置默认值0，确保表中num列没有null值，然后这样查询：<br />select id from t where num=0 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">3.应尽量避免在 where 子句中使用!=或&lt;&gt;操作符，否则将引擎放弃使用索引而进行全表扫描。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">4.应尽量避免在 where 子句中使用 or 来连接条件，否则将导致引擎放弃使用索引而进行全表扫描，如：<br />select id from t where num=10 or num=20<br />可以这样查询：<br />select id from t where num=10<br />union all<br />select id from t where num=20 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">5.in 和 not in 也要慎用，否则会导致全表扫描，如：<br />select id from t where num in(1,2,3)<br />对于连续的数值，能用 between 就不要用 in 了：<br />select id from t where num between 1 and 3 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">6.下面的查询也将导致全表扫描：<br />select id from t where name like '%abc%'<br />若要提高效率，可以考虑全文检索。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">7.如果在 where 子句中使用参数，也会导致全表扫描。因为SQL只有在运行时才会解析局部变量，但优化程序不能将访问计划的选择推迟到运行时；它必须在编译时进行选择。然而，如果在编译时建立访问计划，变量的值还是未知的，因而无法作为索引选择的输入项。如下面语句将进行全表扫描：<br />select id from t where <font color="#000000">num=@num</font><br />可以改为强制查询使用索引：<br />select id from t with(index(索引名)) where <font color="#000000">num=@num</font></p>
		<p xmlns="http://www.w3.org/1999/xhtml">8.应尽量避免在 where 子句中对字段进行表达式操作，这将导致引擎放弃使用索引而进行全表扫描。如：<br />select id from t where num/2=100<br />应改为: <br />select id from t where num=100*2 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">9.应尽量避免在where子句中对字段进行函数操作，这将导致引擎放弃使用索引而进行全表扫描。如：<br />select id from t where substring(name,1,3)='abc'--name以abc开头的id<br />select id from t where datediff(day,createdate,'2005-11-30')=0--‘2005-11-30’生成的id<br />应改为:<br />select id from t where name like 'abc%'<br />select id from t where createdate&gt;='2005-11-30' and createdate&lt;'2005-12-1' </p>
		<p xmlns="http://www.w3.org/1999/xhtml">10.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算，否则系统将可能无法正确使用索引。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">11.在使用索引字段作为条件时，如果该索引是复合索引，那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引，否则该索引将不会被使用，并且应尽可能的让字段顺序与索引顺序相一致。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">12.不要写一些没有意义的查询，如需要生成一个空表结构：<br />select col1,col2 into #t from t where 1=0<br />这类代码不会返回任何结果集，但是会消耗系统资源的，应改成这样：<br />create table #t(...) </p>
		<p xmlns="http://www.w3.org/1999/xhtml">13.很多时候用 exists 代替 in 是一个好的选择：<br />select num from a where num in(select num from b)<br />用下面的语句替换：<br />select num from a where exists(select 1 from b where num=a.num) </p>
		<p xmlns="http://www.w3.org/1999/xhtml">14.并不是所有索引对查询都有效，SQL是根据表中数据来进行查询优化的，当索引列有大量数据重复时，SQL查询可能不会去利用索引，如一表中有字段sex，male、female几乎各一半，那么即使在sex上建了索引也对查询效率起不了作用。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">15.索引并不是越多越好，索引固然可以提高相应的 select 的效率，但同时也降低了 insert 及 update 的效率，因为 insert 或 update 时有可能会重建索引，所以怎样建索引需要慎重考虑，视具体情况而定。一个表的索引数最好不要超过6个，若太多则应考虑一些不常使用到的列上建的索引是否有必要。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">16.应尽可能的避免更新 clustered 索引数据列，因为 clustered 索引数据列的顺序就是表记录的物理存储顺序，一旦该列值改变将导致整个表记录的顺序的调整，会耗费相当大的资源。若应用系统需要频繁更新 clustered 索引数据列，那么需要考虑是否应将该索引建为 clustered 索引。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">17.尽量使用数字型字段，若只含数值信息的字段尽量不要设计为字符型，这会降低查询和连接的性能，并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符，而对于数字型而言只需要比较一次就够了。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">18.尽可能的使用 varchar/nvarchar 代替 char/nchar ，因为首先变长字段存储空间小，可以节省存储空间，其次对于查询来说，在一个相对较小的字段内搜索效率显然要高些。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">19.任何地方都不要使用 select * from t ，用具体的字段列表代替“*”，不要返回用不到的任何字段。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">20.尽量使用表变量来代替临时表。如果表变量包含大量数据，请注意索引非常有限（只有主键索引）。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">21.避免频繁创建和删除临时表，以减少系统表资源的消耗。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">22.临时表并不是不可使用，适当地使用它们可以使某些例程更有效，例如，当需要重复引用大型表或常用表中的某个数据集时。但是，对于一次性事件，最好使用导出表。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">23.在新建临时表时，如果一次性插入数据量很大，那么可以使用 select into 代替 create table，避免造成大量 log ，以提高速度；如果数据量不大，为了缓和系统表的资源，应先create table，然后insert。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">24.如果使用到了临时表，在存储过程的最后务必将所有的临时表显式删除，先 truncate table ，然后 drop table ，这样可以避免系统表的较长时间锁定。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">25.尽量避免使用游标，因为游标的效率较差，如果游标操作的数据超过1万行，那么就应该考虑改写。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">26.使用基于游标的方法或临时表方法之前，应先寻找基于集的解决方案来解决问题，基于集的方法通常更有效。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">27.与临时表一样，游标并不是不可使用。对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法，尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快。如果开发时间允许，基于游标的方法和基于集的方法都可以尝试一下，看哪一种方法的效果更好。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">28.在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ，在结束时设置 SET NOCOUNT OFF 。无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">29.尽量避免大事务操作，提高系统并发能力。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">30.尽量避免向客户端返回大数据量，若数据量过大，应该考虑相应需求是否合理。 </p>
		<p xmlns="http://www.w3.org/1999/xhtml">具体的SQL语句在很多情况下需要结合实际的应用情况来写，这里不作叙述。</p>
<img src ="http://www.blogjava.net/zqli/aggbug/56145.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-07-02 12:04 <a href="http://www.blogjava.net/zqli/archive/2006/07/02/56145.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个实战团队项目工具集</title><link>http://www.blogjava.net/zqli/archive/2006/06/07/51146.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Wed, 07 Jun 2006 07:50:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/06/07/51146.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/51146.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/06/07/51146.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/51146.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/51146.html</trackback:ping><description><![CDATA[今天看了篇&lt;程序员2006年第5期&gt;的文章，做点笔记：<br />1、版本管理工具：<br />      Subversion:<br />          ·客户端：小海龟（tortoisecvs）；<br />          ·差异比较工具：WinMerge；<br />          ·Web代码浏览工具：Fisheye；<br />          ·帐号管理工具：CVSTrac；<br />2、项目管理工具：<br />       Jira<br />3、设计与建模工具：<br />      Jude：除了不能逆向数据库结构外，已经几乎符合了全部的要求。<br />     流程图：SmartDraw。<br />4、开发环境：<br />     IntelliJ IDEA<br />  略……<img src ="http://www.blogjava.net/zqli/aggbug/51146.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-06-07 15:50 <a href="http://www.blogjava.net/zqli/archive/2006/06/07/51146.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Junit读书笔记</title><link>http://www.blogjava.net/zqli/archive/2006/05/29/48696.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Mon, 29 May 2006 03:00:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/05/29/48696.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/48696.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/05/29/48696.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/48696.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/48696.html</trackback:ping><description><![CDATA[6个值得测试的具体部位，能提高你的测试技巧：<br />·Right——结果是否<font color="#ff0000">正确</font>？<br />·B——是否所有的<font color="#ff0000">边界</font>条件都是正确的？<br />·I——能查一下<font color="#ff0000">反向</font>关联吗？<br />·C——能用其他手段<font color="#ff0000">交叉检查</font>一下结果吗？<br />·E——你是否可以强制<font color="#ff0000">错误条件</font>发生？<br />·P——是否满足<font color="#ff0000">性能</font>要求？<br /><br /><br />PS：模拟高负载情况的工具，免费的JUnitPerf。<img src ="http://www.blogjava.net/zqli/aggbug/48696.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-05-29 11:00 <a href="http://www.blogjava.net/zqli/archive/2006/05/29/48696.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GRE难句</title><link>http://www.blogjava.net/zqli/archive/2006/04/21/42400.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Fri, 21 Apr 2006 11:04:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/04/21/42400.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/42400.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/04/21/42400.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/42400.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/42400.html</trackback:ping><description><![CDATA[Perhaps the fact that many of these first studies considered only algae of  a size that could be collected in a net (net phytoplankton), a practice that over-looked the smaller phytoplankton(nannoplankton) that we now know grazers are most likely to feed on, let to a de-emphasis of the role of grazers in subsequent research.<img src ="http://www.blogjava.net/zqli/aggbug/42400.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-04-21 19:04 <a href="http://www.blogjava.net/zqli/archive/2006/04/21/42400.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>继承选择符</title><link>http://www.blogjava.net/zqli/archive/2006/04/21/42282.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Fri, 21 Apr 2006 02:39:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/04/21/42282.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/42282.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/04/21/42282.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/42282.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/42282.html</trackback:ping><description><![CDATA[继承选择符也称作上下文选择符。它在继承父元素样式的基础上，应用自己特有的样式，并且这个选择符只有在父元素所在的环境中才发挥作用，在其他环境中则无效。<img src ="http://www.blogjava.net/zqli/aggbug/42282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-04-21 10:39 <a href="http://www.blogjava.net/zqli/archive/2006/04/21/42282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《IT企业项目管理：问题、方法和工具》读书笔记</title><link>http://www.blogjava.net/zqli/archive/2006/03/21/36566.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Tue, 21 Mar 2006 02:11:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/03/21/36566.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/36566.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/03/21/36566.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/36566.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/36566.html</trackback:ping><description><![CDATA[在IT企业中，研发项目所涉及的主要过程域有：<br />·项目管理过程域：立项管理、结项管理、项目规划、项目监控、配置管理、变更管理等。<br />·项目研发过程域：需求开发与管理、软硬件设计、软硬件实现、软硬件测试、发布与验收等。<br />·机构支持过程域：质量保证、客户服务等。<img src ="http://www.blogjava.net/zqli/aggbug/36566.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-03-21 10:11 <a href="http://www.blogjava.net/zqli/archive/2006/03/21/36566.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重构XP结对编程（PP）</title><link>http://www.blogjava.net/zqli/archive/2006/03/16/35674.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Thu, 16 Mar 2006 08:30:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/03/16/35674.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/35674.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/03/16/35674.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/35674.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/35674.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不强求实行结对，而是鼓励程序员为完成复杂的任务结对，那么结对编程的有利方面如改进的代码级设计、通过改善交流的知识分享、体会团队精神等，在不带来负面影响的条件下（高维护费的实践、因结对变动而随时出现的不和谐的结对、对简单任务的“滥用”等）是可能实现的。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">花费更多的时间在前期的设计上，并通过团队过程来完成。在某种程度上，</SPAN><SPAN lang=EN-US>XP</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">采用协作设计会议的方式</SPAN><SPAN lang=EN-US>-</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在团队开始编写产品代码时，大多数关键的设计决策已经完成。<BR>书面文档也能减少对结对编程和团队同在一地的需求。</SPAN></P><img src ="http://www.blogjava.net/zqli/aggbug/35674.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-03-16 16:30 <a href="http://www.blogjava.net/zqli/archive/2006/03/16/35674.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>