??xml version="1.0" encoding="utf-8" standalone="yes"?> 1、原码的定义 ①小数原码的定义 [X]?/sub> = 例如Q?X=+0.1011 , [X]? 01011 [X]?/sub> = 2、补码的定义 ①小数补码的定义 [X]?/sub> = 例如Q?nbsp; X=+0.1011, [X]?/sub>= 01011 ②整数补码的定义 [X]?/sub> = 3、反码的定义 ①小数反码的定义 [X]?/sub> = 例如Q?nbsp; X=+0.1011 [X]?/sub>= 01011 ②整数反码的定义 [X]?/sub> = 4.UȝQ移码只用于表示点数的阶码Q所以只用于整数?/strong> ①移码的定义Q设?位符号位和n位数gl成的阶码,?[X]U?/sub>=2n + X -2n≤X ≤ 2n ②移码与补码的关p: [X]UM[X]补的关系是符号位互ؓ反码Q?br />
例如Q?X=Q?011 [X]U?/sub>=11011 [X]?/sub>=01011 ③移码运应注意的问题: [XQY]?/sub>= [X]?/sub>Q?[Y]?/sub> 若已知[Y]?/sub>Q求[QY]?/sub>的方法是Q将[Y]?/sub>的各位(包括W号位)逐位取反再在最低位?卛_?br />
例如Q[Y]?/sub>= 101101 [QY]?/sub>= 010011 W号?0 表示正数 11 表示负数 设X=0.1101QY=Q?. 1011Q求X*Y §2.5 点q算与Q点运器 设两个QҎ X=Mx?Ex Y=My?Ey ④舍入操作:在执行对阶或双操作时常?#8220;0”?#8220;1”入法右Udȝ数数D行舍入,以确保精度?br />
⑤判l果的正性:x查阶码是否溢?br />
若阶码下溢(Uȝ表示?0…0Q,要置l果为机?Q?br />
若阶码上溢(过了阶码表C的最大||溢出标志?/font> 例题Q假定X=0 .0110011*211QY=0.1101101*2-10Q此处的数均Zq制Q??? 计算X+YQ?br />
解:[X]?/sub>Q?0 1 010 1100110 ①阶码运:阶码求和Q乘法)或阶码求差(除法Q?br />
?nbsp; [Ex+Ey]U? [Ex]U? [Ey]?nbsp; ②QҎ的尾数处理:点C数乘除法运结果要q行舍入处理 1. 二进制数与十q制C间的转换
⑴二q制数{换成十进制数
[?/span>](11111001001)2=1×210+1×29+1×28+1×27+1×26+0×25+0×24
+1×23+0×22+0×21+1×20
=(1993)10
(1011.101)2=1×23+0×22+1×21+1×20+1×2-1+0×2-2+1×2-3 =(11.625)10
⑵十q制数{换成二进制数
①十q制整数转换成二q制整数(除基(2)取余?/span>)
[?/span>]
2 1993
2 996 …………1…………0?/span> 低位二进制整?/span>
2 498 …………0…………1?/span>
2 249 …………0…………2?/span>
2 124 …………1…………3?/span>
2 62 …………0…………4?/span>
2 31 …………0…………5?/span>
2 15 …………1…………6?/span>
2 7 …………1…………7?/span>
2 3 …………1…………8?/span>
2 1 …………1…………9?/span>
0 …………1…………10?/span> 高位二进制整?/span>
注意,除到0商时l束2除步,回写(从高位回C?/span>)余数便是所求二q制?/span>,?/span>:(1993)10=(11111001001)2
②十q制U小数{换成二进制纯数(乘基(2)取整?/span>)
[?/span>]
0.625
2
2-1?#8230; 1. 250 高位二进制小?/span>
2
2-2?#8230; 0. 500
2
2-3?/span> 1.000 低位二进制小?/span>
U小C被全乘ؓ0?/span>,得准二q制U小?/span>;否则(U小C永远?/span>2乘不为全?/span>0)只能化成满某一_度要求的二进制小数的q似倹{例?/span>(0.625)10=(0.101)2是准?/span>,其中101是顺写的U整?/span>(从高位到低位)数?/span>
⑴二q制数{换成八进制数(三位分组转换?/span>,卛_三ؓ一?/span>)
[?/span>]二q制?/span>11010001011.11011用三位分l{换的Ҏ转换成八q制数?/span>
①从数点vҎC向左,对小C向右三位分一l?/span>,不三位?/span>,在最外端加补0?/span>,使之都成Z位:
(填入0?/span>)0→011 010 001 011.110 110←0(填入0?/span>)
②将三位一l二q制数分别{换成八进制数,q按原位|次序写成新的记数数,卛_与原数等值的八进制数:3213.66
③从而有:(11010001011.11011)2=(3213.66)8
所以这样做,是因为八q制数的不同数字恰是8个三位二q制数?/span>
⑵八q制数{换成二进制数
八q制数{换成二进制数?/span>,正是上述Ҏ的?/span>(一分ؓ三法)。只是注意要在{换成二进制数?/span>,相当于被加补的0位上的那?/span>0略去,q些0在二q制记数中是可有可无?/span>,它们q不影响记数倹{?/span>
[?/span>](3213.66)8=(011 010 001 011.110 110)2=(11010001011.11011)2
八进制数与十q制C间的转换,我们臛_可以q样做:
①通过二进制数作中间过?/span>,它们互转:
(17)10=(10001)2=(010 001)2=(21)8
②用“除基(8)取余?#8221;十q制整数转换成八q制整数,?#8220;乘基(8)取整?#8220;十q制U小数{换成八进制纯数;至于八q制数{换成十进制数,只要“按位乘基q?#8221;卛_Q?/span>
[?/span>] ①由 8 17 ②∵ 0.6875
8
8 2……1(低位) (高位) 5. 500
0 8
……2(高位) (低位) 4.0000
?/span>(17)10=(21)8 ∴(0.6875)10=(0.54)8
③于?/span>,(17.6875)10=(21.54)8
④?/span>(21.54)8=2×81+1×80+5×8-1+4×8-2(按位乘基q?/span>)
=16+1+5×0.125+4×0.015625=(17.6875)10
⑴二q制数{换成十六q制?/span>(四位分组转换?/span>,卛_四ؓ一?/span>)
[?/span>](101101111100011.110101111)2=(0101 1011 1110 0011.1101 0111 1000)2
=(5BE3.D78)16
⑵十六进制数转换成二q制?/span>(四位分组转换法的逆方?/span>,即一分ؓ四法)
[?/span>](5BE3.D78)16=(0101 1011 1110 0011.1101 0111 1000)2
=(101101111100011.110101111)2
十六q制C十进制数之间的{换和八进制数与十q制C间的转换的方法完全相?/span>,对基16操作h也很Ҏ,q里׃再赘qC?/span>
需要强调的是:计算够处理的M信息,其数据Ş式在计算机内部都?/span>0?/span>1的方式进?a onclick="javascript:tagshow(event, '%B4%E6%B4%A2');" href="javascript:;" target="_self">存储。Q何信息要惛_入计机,都必ȝq一个{换装|?/span>,先把计算处理的信息{换成仅由0?/span>1l成的二q制代码之后再存入计机。要把存储于计算机内的各U信息输出来,也必dl过转换装置把二q制信息转换成h们所熟悉的和常用的符受这些工作是p机自动完成?/span>,q不需要用户干预?/span>
计算机所能处理和存储的信息是大量?/span>,其Y件系l要适应发展的需?/span>,对表CZ息的二进制数?/span>(代码)必须q行l一的编?/span>,以保证计机的通用?/span>,否则׃造成在互换和交流时的混ؕ?/span>
通常,十q制数字、英文字母和一些专用符L数据都用一定长度的二进制数来表C?/span>,UC~码;用编码表C的数据q代码。用计机?/span>,E序、控制命令、数据等在其内部(机器U上)一律都用代码。现?/span>,已有许多U编码方?/span>,但被普遍使用的是下述的几U方法?/span>
X
0≤X Q?
1Q?X
Q? Q?X ≤ 0
X=Q?.1011 [X]? 11011
②整数原码的定义
X
0≤X Q?n
2nQX
Q?2n Q?X ≤ 0
X
0≤X Q?
2Q?X
Q? ≤ X Q?0
X=Q?.1011, [X]?/sub>= 10101
X
0≤X Q?n
2n+1QX
Q?2n ≤ X Q?0
X
0≤X Q?
2Q?n-1QX
Q? Q?X ≤ 0
X=Q?.1011 [X]?/sub>= 10100
X
0≤X Q?n
2n+1Q?QX
Q?2n Q?X ≤ 0
例如Q?X=Q?011 [X]U?/sub>=11011 W号?#8220;1”表示正号
X=Q?011 [X]U?/sub>=00101 W号?#8220;0”表示负号
X=Q?011 [X]U?/sub>=00101 [X]?/sub>=10101
◎对Uȝq算的结果需要加以修正,修正量ؓ2n Q即对结果的W号位取反后才是Uȝ形式的正结果?br />
◎移码表CZQ?有唯一的编码—?000…00Q当出现000…00Ӟ表示Q?nQ,属于点C溢?br />
二、补码加、减q算规则
1、运规?/font>
[XQY]?/sub>= [X]?/sub>Q?[QY]?/sub>2、溢出判断,一般用双符号位q行判断Q?/font>
l果的符号位?1ӞUCؓ上溢Qؓ10ӞUCؓ下溢例题Q设x=0.1101Qy=Q?.0111Q符号位为双W号?br />
用补码求x+yQxQy
[x]?[y]?00 1101+11 1001=00 0110
[xQy]?[x]?[Qy]?00 1101+00 0111=01 0100
l果错误Q正溢出三、原码一位乘的实玎ͼ
解:W号位单独处理, xW?/sub>Q?yW?/sub>
数值部分用原码q行一位乘Q如下图所C:
高位部分U?/font>
低位部分U?乘数
说明
0 0 0 0 0 0
1 0 1 1
起始情况
Q) 0 0 1 1 0 1
乘数最低位?Q?X
0 0 1 1 0 1
0 0 0 1 1 0
1 1 0 1
1(?
右移部分U和乘数
Q) 0 0 1 1 0 1
乘数最低位?Q?X
0 1 0 0 1 1
0 0 1 0 0 1
1 1 1 0
1(?
右移部分U和乘数
Q) 0 0 0 0 0 0
乘数最低位?Q?0
0 0 1 0 0 1
0 0 0 1 0 0
1 1 1 1
0(?
右移部分U和乘数
Q) 0 0 1 1 0 1
乘数最低位?Q?X
0 1 0 0 0 1
0 0 1 0 0 0
1 1 1 1
1(?
右移部分U和乘数
四、原码一位除的实玎ͼ一般用不恢复余数法Q加减交替法Q?/font>
部分U?/font>
低位部分U?附加?/font>
操作说明
0 0 0 0 0 0
1 0 1 1
起始情况
Q) 0 0 0 0 0 0
乘数最低位?Q?X
0 0 0 0 0 0
0 0 0 0 0 0
1 1 0 1
1(?
右移部分U和乘数
Q) 1 1 0 0 1 1
乘数最低位?Q?X
0 1 0 0 1 1
0 0 1 0 0 1
1 1 1 0
1(?
右移部分U和乘数
Q) 0 0 0 0 0 0
乘数最低位?Q?0
0 0 1 0 0 1
0 0 0 1 0 0
1 1 1 1
0(?
右移部分U和乘数
Q) 0 0 1 1 0 1
乘数最低位?Q?X
0 1 0 0 0 1
0 0 1 0 0 0
1 1 1 1
1(?
右移部分U和乘数
一、QҎ的运规?/font>
1、Q点加减法的运步?/font>
实现X±Y要用如下5步完成:
①对阶操作:阶向大阶看?br />
②进行尾数加减运?br />
③规格化处理Q尾数进行运的l果必须变成规格化的点敎ͼ对于双符号位的补码尾数来_必L
001×××…×× ?10×××…××的Ş?br />
若不W合上述形式要进行左规或双处理?/font>
[Y]?/sub>Q?0 0 110 1101101
W号?阶码 数
W一步:求阶差: ?#916;E?|1010-0110|=0100
W二步:寚wQY的阶码小Q?Y的尾数右U??br />
[Y]?/sub>变ؓ 0 1 010 0000110 1101暂时保存
W三步:数相加Q采用双W号位的补码q算
00 1100110
+00 0000110
00 1101100
W四步规格化Q满格化要求
W五步:舍入处理Q采??入法处理
故最l运结果的点数格式ؓQ?0 1 010 1101101Q?br />
即X+Y=+0. 1101101*210 2、Q点乘除法的运步?/font>
[ExQEy]U? [Ex]U? [QEy]?/font>
例题QX=0 .0110011*211QY=0.1101101*2-10
求X※Y
解:[X]?/sub>Q?0 1 010 1100110
[Y]?/sub>Q?0 0 110 1101101
W一步:阶码相加
[Ex+Ey]U?[Ex]U?[Ey]?1 010+1 110=1 000
1 000为移码表C的0
W二步:原码数怹的结果ؓQ?br />
0 10101101101110
W三步:规格化处理:已满格化要求Q不需左规Q尾C变,阶码不变?br />
W四步:舍入处理Q按舍入规则Q加1q行修正
所?X※Y= 0.1010111?+000
]]>2. 二进制数与八q制C间的转换
3. 二进制数与十六进制数之间的{?/h4>
]]>
要用win2000里的用户名和密码讉K可以了?
win2000要访问winxpQ大U要改以下几个地方:
1?打开我的电脑,工具--文g多w项--查看Q里面取?#8220;使用单文Ӟ夹)׃n”前面的勾 Q是q个意思,具体准确名字忘了Q?
2。如果winxp装了sp2补丁Q必要q网上邻?-右键--属性,选择|卡--右键--属性,取消里面的禁止其它计机讉K我的电脑Q就是关闭防火墙。没装sp2补丁可能也有q项?
3。在开?-q行里,输入gpedit.mscQ进计算机配|?-windows讄--安全讄--本地{略--用户权利指派里,删除拒绝从网l访问这台计机中的所有帐戗?
4.在开?-q行里,输入gpedit.mscQ进计算机配|?-windows讄--安全讄--本地{略--安全选项里,|络讉KQ可匿名讉K的共享逐行dC$ D$ E${(代表C、D、E盘)Q?
在网l访问:本地帐户的安全和׃n模式里,选经?。。。。。。这V?
帐户Q用空白密码的本地帐户只允许进行控制台登陆Q设为禁用?
改了以上的项后,win2000讉KwinxP的方法和winxp讉Kwin2000的方法相同了。(互访的前提条件是双方通过|线q好Qƈ且IP讄合理才行Q?
]]>
PowerPoint 的一大特色就是可以某一演示文稿的多张灯片h一致的格式。设|灯片的M格式有三U方法:母版、配色方案、设计模ѝ?span>
母版
每一份演C文EK有两U母版,卛_灯片母版和标题母版。灯片母版控制所有灯片的格式;标题母版控制标题qȝ片的格式和位|,q能控制指定为标题灯片的灯片Q例如某部分的开始?span>
母版中包含了讑֮的灯片格式占位W。这些占位符是母版不同位置的虚U方框,在这些方框中可以讄所有灯片中出现的标题、文本、图表、表根{组l结构图、剪贴画及背景等目。更改灯片母版Q会影响所有基于母版的演示文稿qȝ片,q种更改也会应用于标题灯片中?span>
同样道理Q更Ҏ题母版的版式Q所有标题灯片也会随之改变。可以在某一张灯片中更Ҏ版设|,例如背景和母版不同或填充颜色不属于母版配色方案。这些特定设|的qȝ片不随母版更改而变化,但随旉可以母版的讄q原到已改变的灯片上。例如,如果qȝ片上有隐藏的背景,只要单击【格?span>(O)】菜单上?span>“背景”命oQ清?span>“忽略母版的背景图?span>”复选框Q即可显C景项?span>
qȝ片母版上的标题、文本、日期灯片~号和页脚等占位W可以删除。还原被删除的占位符Q在qȝ片母版视图中单击【格?span>(D)】菜单,单击“母版格式”命oQ单击需要添加项的复选框Q单?span>“定”按钮。只有在qȝ片母版上删除某项占位W后Q才能用相应的复选框。不要在母版上键入文字或插入对象Q应该切换到qȝ片或大纲视图后操作?span>
配色Ҏ
配色Ҏ由八U颜色组成,用于演示文稿的主要颜Ԍ例如文本、背景、填充、强调文字所用的颜色。方案中的每U颜色都会自动用于灯片上的不同lg?span>
用模板创建演C文E时Q程序已为每一个模杉K择了一U配色方案。演C文E的配色Ҏ可以更换Q单凅R格?span>(D)】菜单,单击“qȝ片配色方?span>”命oQ挑选或自定义一U配色方案,用于某张或全部演C文Eѝ通过q种方式Q可以很Ҏ地更ҎC文E的配色ҎQƈ保新的配色Ҏ和演C文E中的其他灯片怺调和Q如惛_一张灯片的配色方案应用于另一张中Q可在灯片览视图中选择h所需配色Ҏ的灯片Q单?span>“常用”工具?span>“格式?span>”?Q可以重新着色一张灯片Q双?span>“格式?span>”键,依次单击要应用配色方案的一张或者多张灯片Q可同时重新着色多张灯片?span>
配色Ҏ中除了预讄八种颜色Q还有许多其他颜色可供用。按“配色Ҏ”对话?span>“自定?span>”选项卡中“更改颜色”按钮Q可使用“标准”?span>“自定?span>”选项卡中的颜色改变灯片lgQ该颜色会自动添加到各个颜色卡中Q所有文本、阴影、项目符受背景、和U条都能使用该颜艌Ӏ?span>
d的颜色将出现在配色方案的八种颜色的下面,最多可以添加和昄八种颜色。如果添加的颜色过八种Q最新的颜色出现在调色板的W一位,而最旧的颜色被删除。即使更攚w色方案,d到颜色菜单中的颜色仍然保持不变。同样地Q以q些颜色着色的文本或对象也不会改变?span>
如果l常使用一些不属于配色Ҏ内的特定颜色Q此功能非常有用?span>
设计模板
PowerPoint 提供两种模板Q设计模板和内容模板。设计模板包含预定义的格式和配色ҎQ可以应用到L演示文稿中创定义的外观;内容模板包含的格式和配色Ҏ与设计模板相同,不同的是加上了针对特定主题提供的内容。在演示文稿中应用设计模板时Q新模板的母版和配色Ҏ取代原演示文稿的母版和配色Ҏ。应用设计模板之后,不论自动版式是什么,d的每张新qȝ片都会拥有相同的自定义外观?span>
PowerPoint 提供了各U专业设计的模板Q可在新建演C文E时选用模板Q对已徏立的演示文稿也可更改模板Q单?span>“常规d”工具栏中?span>“应用设计模板”按钮Q在对话框的列表中选择合适的模板?span>
用户q可以添加自p计的模板。单凅R文?span>(F)】菜单中?span>“另存?span>”命oQ在“另存?span>”对话框中Q将保存位置选择?span>“/Microsoft Office/template/演示文稿设计”文g夹中Q?span>“保存cd”定ؓ“演示文稿模板”Q输入模板的“文g?span>”Q即可将自己设计的模板保存,q在“新徏演示文稿”对话框的“演示文稿设计”选项卡和“常规d”工具栏中?span>“应用设计模板”按钮Ȁzȝ对话框中列出。如果其他设|不变,“另存?span>”选择“演示文稿”文g夹,则可做ؓ内容模板Q在“新徏演示文稿”对话框的“演示文稿”选项卡中列出?span>
配色Ҏ
配色Ҏ由八U颜色组成,用于演示文稿的主要颜Ԍ例如文本、背景、填充、强调文字所用的颜色。方案中的每U颜色都会自动用于灯片上的不同lg?span>
用模板创建演C文E时Q程序已为每一个模杉K择了一U配色方案。演C文E的配色Ҏ可以更换Q单凅R格?span>(D)】菜单,单击“qȝ片配色方?span>”命oQ挑选或自定义一U配色方案,用于某张或全部演C文Eѝ通过q种方式Q可以很Ҏ地更ҎC文E的配色ҎQƈ保新的配色Ҏ和演C文E中的其他灯片怺调和Q如惛_一张灯片的配色方案应用于另一张中Q可在灯片览视图中选择h所需配色Ҏ的灯片Q单?span>“常用”工具?span>“格式?span>”?Q可以重新着色一张灯片Q双?span>“格式?span>”键,依次单击要应用配色方案的一张或者多张灯片Q可同时重新着色多张灯片?span>
配色Ҏ中除了预讄八种颜色Q还有许多其他颜色可供用。按“配色Ҏ”对话?span>“自定?span>”选项卡中“更改颜色”按钮Q可使用“标准”?span>“自定?span>”选项卡中的颜色改变灯片lgQ该颜色会自动添加到各个颜色卡中Q所有文本、阴影、项目符受背景、和U条都能使用该颜艌Ӏ?span>
d的颜色将出现在配色方案的八种颜色的下面,最多可以添加和昄八种颜色。如果添加的颜色过八种Q最新的颜色出现在调色板的W一位,而最旧的颜色被删除。即使更攚w色方案,d到颜色菜单中的颜色仍然保持不变。同样地Q以q些颜色着色的文本或对象也不会改变?span>
如果l常使用一些不属于配色Ҏ内的特定颜色Q此功能非常有用?span>
设计模板
PowerPoint 提供两种模板Q设计模板和内容模板。设计模板包含预定义的格式和配色ҎQ可以应用到L演示文稿中创定义的外观;内容模板包含的格式和配色Ҏ与设计模板相同,不同的是加上了针对特定主题提供的内容。在演示文稿中应用设计模板时Q新模板的母版和配色Ҏ取代原演示文稿的母版和配色Ҏ。应用设计模板之后,不论自动版式是什么,d的每张新qȝ片都会拥有相同的自定义外观?span>
PowerPoint 提供了各U专业设计的模板Q可在新建演C文E时选用模板Q对已徏立的演示文稿也可更改模板Q单?span>“常规d”工具栏中?span>“应用设计模板”按钮Q在对话框的列表中选择合适的模板?span>
用户q可以添加自p计的模板。单凅R文?span>(F)】菜单中?span>“另存?span>”命oQ在“另存?span>”对话框中Q将保存位置选择?span>“/Microsoft Office/template/演示文稿设计”文g夹中Q?span>“保存cd”定ؓ“演示文稿模板”Q输入模板的“文g?span>”Q即可将自己设计的模板保存,q在“新徏演示文稿”对话框的“演示文稿设计”选项卡和“常规d”工具栏中?span>“应用设计模板”按钮Ȁzȝ对话框中列出。如果其他设|不变,“另存?span>”选择“演示文稿”文g夹,则可做ؓ内容模板Q在“新徏演示文稿”对话框的“演示文稿”选项卡中列出?span>
大纲、备注页和讲义的应用
大纲演示文稿在大U视图中以大UŞ式显C。大U由每张qȝ片的标题和正文组成?span>
大纲视图是组l和创徏演示文稿内容的理x式。在 PowerPoint 中创建大UԌ可?span>“内容提示向导”Q或从其他应用程序(?span> Microsoft WordQ导入大UӀ?span>
每张qȝ片的标题都会出现在编号和图标的旁边,正文在每个标题的下面。正文的~进可多达五层。在大纲视图中,可以重新排列qȝ片、移动整张灯片、编辑标题和正文。在大纲视图可以看见屏幕上所有的标题和正文,l织内容非常Ҏ。例如,重排qȝ片或目W号Q只要选定要移动的内容Q再拖动到新位置卛_。切换到大纲视图Ӟ显C?span>“大纲”工具栏,使用其中的工h钮,可以快速组l演C文E,如更攚w目符L~进层次Q将目W号或整张灯片在大U中前后UdQ显C或隐藏格式Q以及展开或压~选定qȝ片文本等
备注和讲义Z辅助演示Q?span>PowerPoint 的每张灯片都有一个备注页Q其中包含灯片的羃囑֏供演讲者备注用的I间。备注页可以打印Q发l观众,在运行演C文E时作ؓ提示重点。也可以打印每页包含二张、三张、或六张qȝ片的讲义Q帮助观众了解演C文E的内容?span>
备注和讲义都h母版Q可以在母版上添加要在每|C的目。方法是Q单凅R文?span>(F)】菜单中?span>“打印”命oQ单?span>“打印内容”Ҏ右侧的下拉箭_如果只需昄qȝ片的内容Q选择单击某个“讲义”。如果要包括演讲者备注和qȝ片,单击“备注?span>”。如果要在打印内容中包括qȝ片标题和重点Q也可以选择“大纲视图”?span>
版式的应?/span>
创徏新的qȝ片,可以单击“常用”工具栏的“新徏”?span>“常规d”工具栏的“新灯片”按钮?span>
?span>“新灯片”对话框中?span>24U不同版面设|的自动版式中,Ҏ需要Q选一U。例如,有一U版式提供标题、文本及图表的占位符Q另一U则提供标题和剪贴画的占位符。标题和文本占位W会采用演示文稿的灯片母版格式。可以对占位W执行移动、调整大或重新讄格式{操作,使它们与qȝ片母版不同。已l创建的qȝ片也可以更改其版式。单?span>“常规d”工具栏上?span>“qȝ片版面设|?span>”按钮Q从中选择一U版式。如果新的版式中没有所需的占位符Q例如已l制作了一份图表,但新版式q不提供图表占位W,q时信息也不会丢失。所有已创徏的对象仍然存在,但必重排这些对象它们配合新的版式?/span>
那么什么是ESB呢?
我们知道SOA体系l构要求企业里面所有的和业务相关的应用E序都应该提供webservice的接口。那么一旦这一步实C之后Q所有的应用E序面的问题就是如何去调用q些或者说q么多接口,当然使用webservice的客L采取同步调用的方式当然是可以的。同时如果企业应用有可~性要求,那么也可以采取异步的消息调用机制。而ESB是采用了消息封装这一思想Q把所有对服务的调用都通过l一的消息接口封装v来,无论消息是同步的q是异步的。此外ESBq可以对企业的其他消息服务也提供同样的借口Q例如mail,JMS,IBM MQ,MSMQ{等?/p>
ESB可以有那些用 ?
ESB不是万能?他不是一个应用程序框?也不是一个企业应用的解决Ҏ.它只是一个基于消息的调用企业服务的通信模块!你可以把它嵌入到你的应用E序框架?例如嵌入到spring容器里面,或者嵌入到工作系l中.它的作用是对企业里面的SOA服务的调用提供一个框架和便的Ҏ.
ESB距离实际的企业应用还有哪些不?
ESB目前有很多商业方?也有很多开源?例如ObjectWeb,CodeHaus,Sourceforge都有q样的开源项?距离真正成熟q有一D距?另外各家厂商都各自ؓ?目前JCPq没有这Ҏ术的草案,标准的指定也q有很长的距?当然,目前的状态和SOA一?怿{SOA真正普及的时?ESB会更加的成熟.
Q?Q接攉证用h字证书的甌?br>Q?Q确定是否接受用h字证书的甌Q即证书的审扏V?br>Q?Q向甌者颁发(或拒l颁发)数字证书?br>Q?Q接收、处理用L数字证书更新h?br>Q?Q接收用h字证书的查询、撤销?br>Q?Q生和发布证书的有效期?br>Q?Q数字证书的归档?br>Q?Q密钥归档?br>Q?Q历史数据归档?br>
再看例子Q?
例四Q?
1、chara[20];
2、int*ptr=a;
...
...
3、ptr+=5;
在这个例子中Qptr被加上了5Q编译器是这样处理的Q将指针ptr的值加?乘sizeof(int)Q在32位程序中是加上??=20。由于地址的单位是字节Q故现在的ptr所指向的地址比v?后的ptr所指向的地址来说Q向高地址方向Ud?0个字节。在q个例子中,没加5前的ptr指向数组a的第0号单元开始的四个字节Q加5后,ptr已经指向了数la的合法范围之外了。虽然这U情况在应用上会出问题,但在语法上却是可以的。这也体现出了指针的灉|性?
如果上例中,ptr是被减去5Q那么处理过E大同小异,只不qptr的值是被减?乘sizeof(int)Q新的ptr指向的地址比原来的ptr所指向的地址向低地址方向Ud?0个字节?
ȝ一下,一个指针ptrold加上一个整数n后,l果是一个新的指针ptrnewQptrnew的类型和ptrold的类型相同,ptrnew所指向的类型和ptrold所指向的类型也相同。ptrnew的值将比ptrold的值增加了n乘sizeof(ptrold所指向的类?个字节。就是说Qptrnew所指向的内存区比ptrold所指向的内存区向高地址方向Ud了n乘sizeof(ptrold所指向的类?个字节?
一个指针ptrold减去一个整数n后,l果是一个新的指针ptrnewQptrnew的类型和ptrold的类型相同,ptrnew所指向的类型和ptrold所指向的类型也相同。ptrnew的值将比ptrold的值减了n乘sizeof(ptrold所指向的类?个字节,是_ptrnew所指向的内存区比ptrold所指向的内存区向低地址方向Ud了n乘sizeof(ptrold所指向的类?个字节?
q算W?amp;?
q里&是取地址q算W,*?..书上叫做"间接q算W??
&a的运结果是一个指针,指针的类型是a的类型加?Q指针所指向的类型是a的类型,指针所指向的地址嘛,那就是a的地址?
*p的运结果就五花八门了。M*p的结果是p所指向的东西,q个东西有这些特点:它的cd是p指向的类型,它所占用的地址是p所指向的地址?
例五Q?
inta=12;
intb;
int*p;
int**ptr;
p=&a;
//&a的结果是一个指针,cd是int*Q指向的cd是intQ指向的地址是a的地址?
*p=24;
//*p的结果,在这里它的类型是intQ它所占用的地址是p所指向的地址Q显Ӟ*p是变量a?
ptr=&p;
//&p的结果是个指针,该指针的cd是p的类型加?Q在q里是int **。该指针所指向的类型是p的类型,q里是int*。该指针所指向的地址是指针p自己的地址?
*ptr=&b;
//*ptr是个指针Q?amp;b的结果也是个指针Q且q两个指针的cd和所指向的类型是一LQ所以用&b来给*ptr赋值就是毫无问题的了?
**ptr=34;
//*ptr的结果是ptr所指向的东西,在这里是一个指针,对这个指针再做一?q算Q结果就是一个intcd的变量?br /> 指针表达?
一个表辑ּ的最后结果如果是一个指针,那么q个表达式就叫指针表式?
下面是一些指针表辑ּ的例子:
例六Q?
inta,b;
intarray[10];
int*pa;
pa=&a;//&a是一个指针表辑ּ?
int**ptr=&pa;//&pa也是一个指针表辑ּ?
*ptr=&b;//*ptr?amp;b都是指针表达式?
pa=array;
pa++;//q也是指针表辑ּ?br />例七Q?
char*arr[20];
char**parr=arr;//如果把arr看作指针的话Qarr也是指针表达?
char*str;
str=*parr;//*parr是指针表辑ּ
str=*(parr+1);//*(parr+1)是指针表辑ּ
str=*(parr+2);//*(parr+2)是指针表辑ּ
׃指针表达式的l果是一个指针,所以指针表辑ּ也具有指针所h的四个要素:指针的类型,指针所指向的类型,指针指向的内存区Q指针自w占据的内存?/p>
好了Q当一个指针表辑ּ的结果指针已l明地h了指针自w占据的内存的话Q这个指针表辑ּ是一个左|否则׃是一个左倹{?
在例七中Q?amp;a不是一个左|因ؓ它还没有占据明确的内存?ptr是一个左|因ؓ*ptrq个指针已经占据了内存,其实*ptr是指针paQ既然pa已经在内存中有了自己的位|,那么*ptr当然也有了自q位置?
数组和指针的关系
数组的数l名其实可以看作一个指针。看下例Q?
例八Q?
intarray[10]={0,1,2,3,4,5,6,7,8,9},value;
...
...
value=array[0];//也可写成Qvalue=*array;
value=array[3];//也可写成Qvalue=*(array+3);
value=array[4];//也可写成Qvalue=*(array+4);
上例中,一般而言数组名array代表数组本nQ类型是int[10]Q但如果把array看做指针的话Q它指向数组的第0个单元,cd是int*Q所指向的类型是数组单元的类型即int。因?array{于0׃点也不奇怪了。同理,array+3是一个指向数l第3个单元的指针Q所?(array+3){于3。其它依此类推?
例九Q?
char*str[3]={
"Hello,thisisasample!",
"Hi,goodmorning.",
"Helloworld"
};
chars[80]Q?
strcpy(s,str[0]);//也可写成strcpy(s,*str);
strcpy(s,str[1]);//也可写成strcpy(s,*(str+1));
strcpy(s,str[2]);//也可写成strcpy(s,*(str+2));
上例中,str是一个三单元的数l,该数l的每个单元都是一个指针,q些指针各指向一个字W串。把指针数组名str当作一个指针的话,它指向数l的W?号单元,它的cd是char**Q它指向的类型是char*?
*str也是一个指针,它的cd是char*Q它所指向的类型是charQ它指向的地址是字W串"Hello,thisisasample!"的第一个字W的地址Q即'H'的地址?str+1也是一个指针,它指向数l的W?号单元,它的cd是char**Q它指向的类型是char*?
*(str+1)也是一个指针,它的cd是char*Q它所指向的类型是charQ它指向 "Hi,goodmorning."的第一个字W?H'Q等{?
下面ȝ一下数l的数组名的问题。声明了一个数lTYPEarray[n]Q则数组名称array有了两重含义:W一Q它代表整个数组Q它的类型是TYPE[n]Q第?Q它是一个指针,该指针的cd是TYPE*Q该指针指向的类型是TYPEQ也是数组单元的类型,该指针指向的内存区就是数l第0号单元,该指针自己占有单独的内存区,注意它和数组W?号单元占据的内存区是不同的。该指针的值是不能修改的,即类似array++的表辑ּ是错误的?
在不同的表达式中数组名array可以扮演不同的角艌Ӏ?
在表辑ּsizeof(array)中,数组名array代表数组本nQ故q时sizeof函数出的是整个数组的大?
在表辑ּ*array中,array扮演的是指针Q因此这个表辑ּ的结果就是数l第0号单元的倹{sizeof(*array)出的是数组单元的大?
表达式array+nQ其中n=0Q?Q?Q?...。)中,array扮演的是指针Q故array+n的结果是一个指针,它的cd是TYPE*Q它指向的类型是TYPEQ它指向数组Wn号单元。故sizeof(array+n)出的是指针cd的大?
例十
intarray[10];
int(*ptr)[10];
ptr=&array;Q?
上例中ptr是一个指针,它的cd是int(*)[10]Q他指向的类型是int[10] Q我们用整个数组的首地址来初始化它。在语句ptr=&array中,array代表数组本n?
本节中提C函数sizeof()Q那么我来问一问,sizeof(指针名称)出的究竟是指针自ncd的大呢q是指针所指向的类型的大小Q答案是前者。例如:
int(*ptr)[10];
则在32位程序中Q有Q?
sizeof(int(*)[10])==4
sizeof(int[10])==40
sizeof(ptr)==4
实际上,sizeof(对象)出的都是对象自w的cd的大,而不是别的什么类型的大小?br />指针和结构类型的关系
可以声明一个指向结构类型对象的指针?
例十一Q?
structMyStruct
{
inta;
intb;
intc;
}
MyStructss={20,30,40};
//声明了结构对象ssQƈ把ss的三个成员初始化?0Q?0?0?
MyStruct*ptr=&ss;
//声明了一个指向结构对象ss的指针。它的类型是MyStruct*,它指向的cd是MyStruct?
int*pstr=(int*)&ss;
//声明了一个指向结构对象ss的指针。但是它的类型和它指向的cd和ptr是不同的?br /> 请问怎样通过指针ptr来访问ss的三个成员变量?
{案Q?
ptr->a;
ptr->b;
ptr->c;
又请问怎样通过指针pstr来访问ss的三个成员变量?
{案Q?
*pstrQ?/讉K了ss的成员a?
*(pstr+1);//讉K了ss的成员b?
*(pstr+2)//讉K了ss的成员c?
虽然我在我的MSVC++6.0上调式过上述代码Q但是要知道Q这样用pstr来访问结构成员是不正规的Qؓ了说明ؓ什么不正规Q让我们看看怎样通过指针来访问数l的各个单元Q?
例十二:
intarray[3]={35,56,37};
int*pa=array;
通过指针pa讉K数组array的三个单元的Ҏ是:
*pa;//讉K了第0号单?
*(pa+1);//讉K了第1号单?
*(pa+2);//讉K了第2号单?
从格式上看倒是与通过指针讉Kl构成员的不正规Ҏ的格式一栗?
所有的C/C++~译器在排列数组的单元时QL把各个数l单元存攑֜q箋的存储区里,单元和单元之间没有空隙。但在存攄构对象的各个成员Ӟ在某U编译环境下Q可能会需要字寚w或双字对齐或者是别的什么对齐,需要在盔R两个成员之间加若q个"填充字节"Q这导致各个成员之间可能会有若q个字节的空隙?
所以,在例十二中,即*pstr讉KCl构对象ss的第一个成员变量aQ也不能保证*(pstr+1)׃定能讉K到结构成员b。因为成员a和成员b之间可能会有若干填充字节Q说不定*(pstr+1)正好访问到了这些填充字节呢。这也证明了指针的灵zL。要是你的目的就是想看看各个l构成员之间到底有没有填充字节,嘿,q倒是个不错的Ҏ?
q指针访问结构成员的正确Ҏ应该是象例十二中使用指针ptr的方法?
指针和函数的关系
可以把一个指针声明成Z个指向函数的指针。intfun1(char*,int);
int(*pfun1)(char*,int);
pfun1=fun1;
....
....
inta=(*pfun1)("abcdefg",7);//通过函数指针调用函数?
可以把指针作为函数的形参。在函数调用语句中,可以用指针表辑ּ来作为实参?
例十三:
intfun(char*);
inta;
charstr[]="abcdefghijklmn";
a=fun(str);
...
...
intfun(char*s)
{
intnum=0;
for(inti=0;i{
num+=*s;s++;
}
returnnum;
}
q个例子中的函数funl计一个字W串中各个字W的ASCII码g和。前面说了,数组的名字也是一个指针。在函数调用中,当把str作ؓ实参传递给形参s后,实际是把str的g递给了sQs所指向的地址和str所指向的地址一_但是str和s各自占用各自的存储空间。在函数体内对sq行自加1q算Qƈ不意味着同时对strq行了自?q算?br />指针cd转换
当我们初始化一个指针或l一个指针赋值时Q赋值号的左Ҏ一个指针,赋值号的右Ҏ一个指针表辑ּ。在我们前面所丄例子中,l大多数情况下,指针的类型和指针表达式的cd是一LQ指针所指向的类型和指针表达式所指向的类型是一L?
例十四:
1、floatf=12.3;
2、float*fptr=&f;
3、int*p;
在上面的例子中,假如我们惌指针p指向实数fQ应该怎么搞?是用下面的语句吗Q?
p=&f;
不对。因为指针p的类型是int*Q它指向的类型是int。表辑ּ&f的结果是一个指针,指针的类型是float*,它指向的cd是float。两者不一_直接赋值的Ҏ是不行的。至在我的MSVC++6.0上,Ҏ针的赋D句要求赋值号两边的类型一_所指向的类型也一_其它的编译器上我没试q,大家可以试试。ؓ了实现我们的目的Q需要进?强制cd转换"Q?
p=(int*)&f;
如果有一个指针pQ我们需要把它的cd和所指向的类型改为TYEP*TYPEQ?那么语法格式是:
(TYPE*)pQ?
q样强制cd转换的结果是一个新指针Q该新指针的cd是TYPE*Q它指向的类型是TYPEQ它指向的地址是原指针指向的地址。而原来的指针p的一切属性都没有被修攏V?
一个函数如果用了指针作ؓ形参Q那么在函数调用语句的实参和形参的结合过E中Q也会发生指针类型的转换?
例十五:
voidfun(char*);
inta=125,b;
fun((char*)&a);
...
...
voidfun(char*s)
{
charc;
c=*(s+3);*(s+3)=*(s+0);*(s+0)=c;
c=*(s+2);*(s+2)=*(s+1);*(s+1)=c;
}
}
注意q是一?2位程序,故intcd占了四个字节Qcharcd占一个字节。函数fun的作用是把一个整数的四个字节的顺序来个颠倒。注意到了吗Q在函数调用语句中,实参&a的结果是一个指针,它的cd是int*Q它指向的类型是int。Ş参这个指针的cd是char*Q它指向的类型是char。这P在实参和形参的结合过E中Q我们必进行一ơ从int*cd到char*cd的{换。结合这个例子,我们可以q样来想象编译器q行转换的过E:~译器先构造一个时指针char*tempQ?然后执行temp=(char*)&aQ最后再把temp的g递给s。所以最后的l果是:s的类型是char*,它指向的cd是charQ它指向的地址是a的首地址?
我们已经知道Q指针的值就是指针指向的地址Q在32位程序中Q指针的值其实是一?2位整数。那可不可以把一个整数当作指针的值直接赋l指针呢Q就象下面的语句Q?br />unsignedinta;
TYPE*ptr;//TYPE是intQchar或结构类型等{类型?
...
...
a=20345686;
ptr=20345686;//我们的目的是要指针ptr指向地址20345686Q十q制
Q?
ptr=a;//我们的目的是要指针ptr指向地址20345686Q十q制Q?br />~译一下吧。结果发现后面两条语句全是错的。那么我们的目的׃能达C吗?不,q有办法Q?
unsignedinta;
TYPE*ptr;//TYPE是intQchar或结构类型等{类型?
...
...
a=某个敎ͼq个数必M表一个合法的地址Q?
ptr=(TYPE*)aQ?/呵呵Q这可以了?br />严格说来q里?TYPE*)和指针类型{换中?TYPE*)q不一栗这里的(TYPE*)的意思是把无W号整数a的值当作一个地址来看待。上面强调了a的值必M表一个合法的地址Q否则的话,在你使用ptr的时候,׃出现非法操作错误?
x能不能反q来Q把指针指向的地址x针的值当作一个整数取出来。完 全可以。下面的例子演示了把一个指针的值当作一个整数取出来Q然后再把这个整数当作一个地址赋给一个指针:
例十六:
inta=123,b;
int*ptr=&a;
char*str;
b=(int)ptr;//把指针ptr的值当作一个整数取出来?
str=(char*)b;//把这个整数的值当作一个地址赋给指针str?br /> 现在我们已经知道了,可以把指针的值当作一个整数取出来Q也可以把一个整数值当作地址赋给一个指针?
指针的安全问?
看下面的例子Q?
例十七:
chars='a';
int*ptr;
ptr=(int*)&s;
*ptr=1298Q?
指针ptr是一个int*cd的指针,它指向的cd是int。它指向的地址是s的首地址。在32位程序中Qs占一个字节,intcd占四个字节。最后一条语句不但改变了s所占的一个字节,q把和s怏的高地址方向的三个字节也改变了。这三个字节是干什么的Q只有编译程序知道,而写E序的h是不太可能知道的。也许这三个字节里存储了非常重要的数据,也许q三个字节里正好是程序的一条代码,而由于你Ҏ针的马虎应用Q这三个字节的D改变了!q会造成崩溃性的错误?
让我们再来看一例:
例十八:
1、chara;
2、int*ptr=&a;
...
...
3、ptr++;
4?ptr=115;
该例子完全可以通过~译Qƈ能执行。但是看到没有?W?句对指针ptrq行自加1q算后,ptr指向了和整Ş变量a盔R的高地址方向的一块存储区。这块存储区里是什么?我们不知道。有可能它是一个非帔R要的数据Q甚臛_能是一条代码。而第4句竟然往q片存储区里写入一个数据!q是严重的错误。所以在使用指针ӞE序员心里必非常清楚:我的指针I竟指向了哪里。在用指针访问数l的时候,也要注意不要出数组的低端和高端界限Q否则也会造成cM的错误?
在指针的强制cd转换Qptr1=(TYPE*)ptr2中,如果sizeof(ptr2的类?大于sizeof(ptr1的类?Q那么在使用指针ptr1来访问ptr2所指向的存储区时是安全的。如果sizeof(ptr2的类?于sizeof(ptr1的类?Q那么在使用指针ptr1来访问ptr2所指向的存储区时是不安全的。至于ؓ什么,读者结合例十七来想一惻I应该会明白的?/p>
http://embedfans.com/C/2007181016375897.htm
【赏析?br /> q是一首怀Z作。词人把漂泊异乡的落感受,同怀忉|中h的缠l|思结合在一起写Q采用“曲径通幽”的表现方式Q抒情写景,感情真挚。上片写L伫望情景。以l风、草艌Ӏ烟光、残阛_个关合着相思离愁的意象Q组成一q黄昏春望图。上片以“春愁”ؓ核心多层ơ地描摹春愁之景Q春愁之态,W意婉约。下片抒情,直抒胸臆Q写词h情深志坚。“拟把”、“强乐”三句辞意顿折,写词人欲借疏狂之歌呼Q陶然之酣醉Q谋求醉而忘忧,歌而暂Ƣ,以摆脱春愁之压抑和纠~,却落得个“还无味”的无聊和空虚,可见其春愁之深、刻骨,竟无法排遣。最后揭明词人对待“春愁”的果决态度Q“终不悔”。“ؓ伊”,方始画龙Ҏ地道破春愁难遣,为春愁憔悴无悔的隐秘Qؓ了她——那“盈盈仙子?《曲玉管?的坚贞情爱,我亦值得憔悴、瘦损,以生命相托!语直情切Q挟带着市民式的Ȁ情,真是荡气回肠。全词成功地ȝZ个志诚男子的形象Q描写心理充分细腻,其是词的最后两句,直抒胸臆Q画龙点睛般地揭C出Mh公的_境界Q被王国l称为“专作情语而绝妙者”?br /> |
l常会遇到关于二叉树的算法问题,虽然比较单,不过我觉得还是有必要ȝ一下.Z写了个sampleE序Q以供参考.本文中主要讨论关于二叉树的以?个问?都是用递归来实玎ͼDivide and conquer也就是所谓的分冶{略Q?br /> 1.二叉树的高度
2.二叉树的宽度
3.比较两个二叉树是否相{?br />此文对应的参考程序可以在 http://shaohui.zheng.googlepages.com/bst.c 下蝲?/font>
数据l构的定?/strong>
先定义一个简单的二叉树,׃只是演示Q所以定义得比较单.
1
#include
<stdio.h>
2
3
#define MAX(x,y) ((x)>(y)?(x):(y))
4
5
//define a binary search tree
6
typedef
struct
BNode
7 {
8 int val;
9 struct BNode *left, *right;
10 }BNode,*BTree;
二叉树节点的gؓval,另外Z比较方便q定义了一个宏MAX.
12
// insert a node to binary tree
13
// we assume that no duplicated elements
14
void
BTreeInsert(BTree *bt, int val)
15 {
16 BNode *p = *bt,*cur = *bt;//p is a parent node of cur
17 while (cur != NULL)
18 {//find the position to insert node val
19 p = cur;
20 if ( val < cur->val )
21 cur = cur->left;
22 else
23 cur = cur->right;
24 }
25 BNode *n = malloc(sizeof(BNode));
26 n->val = val;
27 n->left = n->right = NULL;
28 if (p == NULL)
29 *bt = n;// the tree is empty
30 else
31 {
32 if (val < p->val)
33 p->left = n;
34 else
35 p->right = n;
36 }
37 }
//BTreeInsert
q定义了一个函数BTreeInsert用来帮助创徏二叉树.
二叉树的高度
基本ҎQ二叉树Q分别求出左叛_数的高度Q然后取左右子树高度的最大数|再加上1Q就是二叉树的高度.
׃该问题又被划分ؓ两个性质一L子问题,因此很容易导致递归Q?/font>
39
//get the depth of a BST
40
int
BTreeDepth(BTree bt)
41 {
42 if (bt != NULL)
43 {
44 int dep_left = BTreeDepth(bt->left);
45 int dep_right = BTreeDepth(bt->right);
46 return MAX(dep_left,dep_right)+1;
47 }
48 return0;
49 }
//BTreeDepth
二叉树的宽度
基本ҎQ左叛_树的宽度相加Q于是就得到二叉树的宽度Q?br />
66
//get the width of a BST
67
int
BTreeWidth(BTree bt)
68 {
69 if (bt != NULL)
70 {
71 if ((bt->left == bt->right) && (bt->left == NULL))
72 return1;// bt is a leaf
73 else
74 return BTreeWidth(bt->left) + BTreeWidth(bt->right);
75 }
76 else
77 return0;
78 }//BTreeWidth
79
二叉树的比较
如果我们认ؓ左右子树位置很重要,也就是说把左叛_树交换以后,我们认ؓ它和原来的子树不一样了Q那么只需要比较一ơ就可以了?/font>
51
//compare 2 binary tree, if bt1 is equal bt2
52
//return 1, or return 0
53
int
BTreeCompare(BTree bt1, BTree bt2)
54 {
55 if ((bt1==bt2) && (bt1==NULL)) // both bt1 and bt2 are empty
56 return1;
57 elseif ((bt1 != NULL) && (bt2 != NULL)) // none of bt1 and bt2 is empty
58 {
59 return BTreeCompare(bt1->left, bt2->left)
60 && BTreeCompare(bt1->right, bt2->right);
61 }
62 else// one of bt1 and bt2 is empty
63 return0;
64 }
如果我们认ؓ左右子树位置不重要,也就是说把左叛_树交换以后,我们认ؓ它和原来的子树还是一LQ那么我们还好多加判断.把其中一个子树左右位|交换以后再比较Q那么原来的E序需要有一些改动.
59-60行需要改成以下内容就可以了?br />59 return (BTreeCompare(bt1->left, bt2->left) && BTreeCompare(bt1->right, bt2->right))
60 || (BTreeCompare(bt1->left, bt2->right) && BTreeCompare(bt1->right, bt2->left));
长尾理论通常使用左边q张长尾曲线图来解释Q头部是大热门,行度曲UK然下坠,但一直没有到零点。这个长长尾巴的价值就是长论通篇讲述的核心?/p>
《长论》书中第110中讲到“长ְ是一U幂?power-law)曲线”,学过中学数学的都知道Q幂率曲U就是类似f(x)=c/x的曲U,其中c为常量。大家看看确实和Chris Anderson描述的长曲U一模一栗?/p>
有了q个前提Q我们来看看长尾理论是否真的d颠覆了二八法则?首先Q了解一下“二八法则”,“二八法则”又U“帕累托法则”,是意大利l济学家帕篏托在19世纪末发现的l济规律Q他发现在经活动中Q少数群体显得更为重要,比如Q?0%的h口掌?0%的胦富?0%的品?0%的销售额{等。因此这个法则也UCؓ“重要少数法则”?/p>
我们在Q何一个地Ҏ断长,比如x=5n的地方,q时?0%多数是x=n之前的部分?个部分的总量分别是:
总量 = c+c/2+c/3+c/4+...+c/5n
头部 = c+c/2+c/3+c/4+...+c/n
1+1/2+1/3+1/4+...+1/n = ln(n+1)+r
头部/总量 = (ln(n)+r) / (ln(5n)+r) = (ln(n)+r) / (ln(n)+ln5+r)
n | 20%的头部比?/td> |
100 | 75.3% |
1000 | 82.3% |
10000 | 85.9% |
其实Chris Anderson也承认:“真正的80/20法则只是承认帕篏托分布的有效性,承认某些东西卖得q比其他东西要好Q这在长ָ场和传统市场中都是成立的。”所以,长尾理论d颠覆了二八法则是没有Ҏ的?/font>
长尾理论不是颠覆性的概念Q更多地是指导我们在丰饶l济的条件下Q寻扑适的长尾市场Q开拓新的销售渠道。所以Chris Anderson也重点谈到“即使有二八法则的统治,在丰饶经环境下Q我们也没有理由不去l营其它?0%产品”。或许,q就是对长尾理论最深刻的注解?/font>
数学知识:Ƨ拉常数的由?/strong>
对于今天我们UCؓ调和U数?br />
1+1/2+1/3+1/4+...
1+1/2+1/3+1/4+1/5+1/6+1/7+1/8+...
1/2+1/2+(1/4+1/4)+(1/8+1/8+1/8+1/8)+...
随后很长一D|_Z无法使用公式去D调合U数Q直到无IL数理论逐步成熟?665qNewton(牛顿)在他的著名著作《流数法》中推导出第一个幂U数Q?br />
ln(1+x) = x - x2/2 + x3/3 - ...
Euler(Ƨ拉)?734q_利用Newton的成果,首先获得了调和数有限多和的倹{结果是Q?br />
1+1/2+1/3+1/4+...+1/n = ln(n)+r (r为常?
他的证明是这LQ?br />ҎNewton的幂U数有:
ln(1+1/x) = 1/x - 1/2x2 + 1/3x3 - ...
1/x = ln((x+1)/x) + 1/2x2 - 1/3x3 + ...
1/1 = ln(2) + 1/2 - 1/3 + 1/4 -1/5 + ...
1/2 = ln(3/2) + 1/2*4 - 1/3*8 + 1/4*16 - ...
......
1/n = ln((n+1)/n) + 1/2n2 - 1/3n3 + ...
1+1/2+1/3+1/4+...1/n = ln(n+1) + 1/2*(1+1/4+1/9+...+1/n2) - 1/3*(1+1/8+1/27+...+1/n3) + ......
1+1/2+1/3+1/4+...1/n = ln(n+1) + r
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1416659
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1413933
SNS的技术v?在互联网中,PC机、智能手机都没有强大的计及带宽资源Q它们依赖网站服务器Q才能浏览发布信息。如果将每个讑֤的计及带宽资源q行重新分配与共享,q些讑֤有可能具备比那些服务器更ؓ强大的能力。这是分布计算理论诞生的根源,是SNS技术诞生的理论基础?/p>
SNS的商业空?当普通h通过安装SNS软g都可以拥有媲网站服务器的计及通信资源Ӟ那些投资了大量服务器的互联网公司怎么办呢?他们的优势在什么地?会不会有更多的新型的互联|公司出玎ͼ而且他们的后C们的前端有没有可能完全不是现在的GOOGLE、EBAY、新模式呢?甚至包括盛大|络游戏q样的运营商Q他们引为骄傲的强大?万台服务器集,是不是他们的核心竞争力呢?当一个OM者家里的那台机器Q就可以让他通过SNS视频器播放他的作品,他还需要去理一个网站吗?或许一个家庭主妇不需要懂得HTML~程Q不需要懂得网站这个词汇,只通过SNS菜谱发布E序及一台厨戉K的PCp让千百万人掌握她的手艺,而且她在厨房的灶C的一招一式都清晰可见。这个时候,您会惛_什?
现在的互联网中,作ؓ客户端的我们像个蠢蛋,只能通过服务器才能干些奴隶般的事情,看别人的|站Q玩别h的游戏,发发邮gQ除此之外,我们没有自由。现在是开始革命的时候了!革命中心d是:如何?0多亿台电脑发挥他们自q作用Q让用户d造和控制自己的信息。中间不需要公司的服务器来摆布我们?br />
Q解二:Q?br /> SNS: Social Network SofwaretQ社会性网lY件。依据六度关pȝ论,以认识朋友的朋友为基Q扩展自q。ƈ且无限扩张自qQ在需要的时候,可以随时获取一点,得到该h脉的帮助?br />
?003q?月vQSNS|站悄然从美国兴?短短的五个月内SNS风靡整个北地区。 据l计Q在谷工作的三Z有一个h使用SNS来拓展自q交际圈。 SNS|站也受C风险投资的追捧,有些SNS|站也获得了巨额的投资?br />
在国内,q股旋风也吹得正猛,提供SNS服务的网站如雨后春笋般破土而出。 而SNS之所以走俏是Z对网l应用需求变化驱动然。 随着|络C会化应用的发展Q网民对|络的要求越来越高,不再仅仅局限于׃{方面,更希望网l能对工作、个人的发展提供更加便捷、高效的支撑和帮助?br />
SNS的中文含义是“社交网l”。顾名思义Q它是C交关系的网l化。将我们现实中的C会圈子搬到|络上,Ҏ不同的条件徏立属于自qC交圈子。 通过朋友认识朋友的Ş式,q速徏立v一个自qZ信Q的朋友圈子。在q个圈子里,怺之间h较高的诚信度Q区别于W一代交友模式的满无目的性?br />
SNS可称为“第二代交友模式”。在q种模式下,l交的都是相对可靠的朋友Q由于用户可以搜索的对象都是h友的朋友Q因而从诚信和安全的角度上来看,它给了用h大的信心和保障。此外,在SN中,不经朋友介绍和用L认,用户的个料是不能被陌生h看到的。因此,对个人的隐私的保障性增Z?br />
用Adobe Reader打开惌{换的PDF文gQ接下来选择“文件→打印”菜单,在打开的“打印”窗口中?font color="#0066cc">“打印机”栏中的名称讄?/font>“Microsoft Office Document Image Writer”,认后将该PDF?font color="#0066cc">件输ZؓMDI格式?font color="#0066cc">虚拟打印文g?/p>
?如果没有扑ֈ“Microsoft Office Document Image Writer”项Q用Office 2003安装光盘中的“添?删除lg”更新安装该lgQ选中“Office 工具 Microsoft DRAW转换器”?/p>
然后Q?font color="#0066cc">q行“Microsoft Office Document Imaging”,q利用它?font color="#0066cc">打开刚才保存的MDI文gQ选择“工具→文本发送到Word”菜单,在弹出的H口中选中?font color="#0066cc">在输出时保持囄版式不变”,认后系l会提示“必d执行此操作前重新q行OCR。这可能需要一些时间”,不管它,认卛_?/p>
?对PDF转DOC的识别率不是特别完美Q{换后会丢失原来的排版格式Q所以{换后q需要手工对其进行排版和校对工作?/p>
以上仅在word2003中可用,其他版本没有Microsoft Office Document Image Writer?br />
L不克的PDF转Word
论坛中谈到很多PDF转换Word的方法,但有些PDF文档本n的制作过E中q不是以文字方式q行制作的,因而利用该Ҏ仍不能进行{换。这里通过利用文字识别软g的功能进行“曲U{换”?br /> 软g需要:Adobe Acrobat Pro(注不是Reader)Q识别Y?如汉王文本等)QWord
ҎQ?br /> Step 1
用Adobe Acrobat Pro打开该PDF文档
点击File—Save As
在弹出窗口中保存cd选取“Jpeg?br />
Step 2
打开WordE序Qƈ新徏一I白文g备用
Step 3
打开OCRE序Q打开刚保存的Jpeg文档
点击“版面分析?br /> 点击“文字识别?br /> 可在~辑H口中进行更正编?br /> 点击“插入Word文档?br />
Step 4
转到Word中,q行E微的排?br /> 卛_
Step 1 转换为Jpeg文档的操? Gif动画 )
另:
1.如果论文写作旉要大量引用部分图书,利用数码相机拍摄相关面Q放入OCR中一样可以识别{换成Word文档Q这Ҏ有扫描A的我们相当有?br />
2.其它诸如”ScanSoft PDF Converter for Microsoft Word v1.0“、”PDF2DOC“对某些PDF文档q不能识别与转换
3.注意Q此Ҏ仅是”曲U{换“,如觉ȝQ请告知更好Ҏ
Step 2-3 Jpeg文档识别与Word文档l转换(省略Step 3 中“更正编辑?
Step 4 ?/p>
Office文档之间的{?/font> |
Word文档转PPTQ?/td> | q里是用Word中的“发送到”命令来实现Word转PPT[全文] |
PPT转Word文档Q?/font> | q也是用“发送到”命令来实现转换[全文] |
快速将Word转换为PPTQ?/font> | 用“插入”的Ҏ也能实现Word转PPT[全文] |
Excel转WordQ?/td> | Excel表格惛_成Doc文档Q只需把需要的单元格选中q复Ӟ再粘贴到Word中保存就可以了?/td> |
Word转ExcelQ?/td> | q里主要是指Word中的表格转成Excel文g。也是用复制_脓的方法就能快速实现?/td> |
Word与WPS文档的{换: | 姑且把WPS与DOC文档的{换放到这里,因ؓWPS文档格式现在已经与Office全兼容了嘛?/font>[全文] |
Word与PDF之间的{?/font> |
其它形式的{?/font> |
在很多操作中Q比如徏立目?数据库连接都需要这L单线E操作?/p>
q有, singleton能够被状态化; q样Q多个单态类在一起就可以作ؓ一个状态仓库一样向外提供服务,比如Q你要论坛中的帖子计数器Q每ơ浏览一ơ需要计敎ͼ单态类能否保持住这个计敎ͼq且能synchronize的安全自动加1Q如果你要把q个数字怹保存到数据库Q你可以在不修改单态接口的情况下方便的做到?/p>
另外斚wQSingleton也能够被无状态化。提供工h质的功能,
Singleton模式׃ؓ我们提供了这样实现的可能。用Singleton的好处还在于可以节省内存Q因为它限制了实例的个数Q有利于Java垃圾回收Qgarbage collectionQ?br />
我们常常看到工厂模式中类装入?class loader)中也用Singleton模式实现?因ؓ被装入的cd际也属于资源?br />
如何使用?
一般Singleton模式通常有几UŞ?
public class Singleton { private Singleton(){} //在自己内部定义自׃个实例,是不是很奇怪? private static Singleton instance = new Singleton(); //q里提供了一个供外部讉K本class的静态方法,可以直接讉K
|
W二UŞ?
public class Singleton {
private static Singleton instance = null; }
|
使用Singleton.getInstance()可以讉K单态类?/p>
上面W二中Ş式是lazy initializationQ也是说第一ơ调用时初始SingletonQ以后就不用再生成了?/p>
注意到lazy initialization形式中的synchronizedQ这个synchronized很重要,如果没有synchronizedQ那么用getInstance()是有可能得到多个Singleton实例。关于lazy initialization的Singleton有很多涉及double-checked locking (DCL)的讨论,有兴者进一步研I?/p>
一般认为第一UŞ式要更加安全些?br />
使用Singleton注意事项Q?br />有时在某些情况下Q用Singletonq不能达到Singleton的目的,如有多个Singleton对象同时被不同的c装入器装蝲Q在EJBq样的分布式pȝ中用也要注意这U情况,因ؓEJB是跨服务器,跨JVM的?/p>
我们以SUN公司的宠物店源码(Pet Store 1.3.1)的ServiceLocatorZE微分析一下:
在Pet Store中ServiceLocator有两U,一个是EJB目录下;一个是WEB目录下,我们查这两个ServiceLocator会发现内容差不多Q都是提供EJB的查询定位服务,可是Z么要分开呢?仔细研究对这两种ServiceLocator才发现区别:在WEB中的ServiceLocator的采取Singleton模式QServiceLocator属于资源定位Q理所当然应该使用Singleton模式。但是在EJB中,Singleton模式已经失去作用Q所以ServiceLocator才分成两U,一U面向WEB服务的,一U是面向EJB服务的?/p>
Singleton模式看v来简单,使用Ҏ也很方便Q但是真正用好,是非怸ҎQ需要对Java的类 U程 内存{概忉|相当的了解?/p>
MQ如果你的应用基于容器,那么Singleton模式用或者不用,可以使用相关替代技术?/p>
q一步深入可参考:
Double-checked locking and the Singleton pattern
When is a singleton not a singleton?
通用cdpȝ支持两种一般类别的cdQ每一c都l分成子cdQ?
值类?
值类型直接包含它们的数据Q值类型的实例要么在堆栈上Q要么内联在l构中。值类型可以是内联的(p行库实现Q、用户定义的或枚丄。有兛_联值类型的列表Q请参见 .NET Framework cd?
引用cd
引用cd存储对值的内存地址的引用,位于堆上。引用类型可以是自描q类型、指针类型或接口cd。引用类型的cd可以p描述cd的值来定。自描述cdq一步细分成数组和类cd。类cd是用户定义的cR装q值类型和委托?
作ؓ值类型的变量Q每个都有自q数据副本Q因此对一个变量的操作不会影响其他变量。作为引用类型的变量可以引用同一对象Q因此对一个变量的操作会媄响另一个变量所引用的同一对象?/font>
2.应尽量避免在 where 子句中对字段q行 null 值判断,否则导致引擎放弃用烦引而进行全表扫描,如:
select id from t where num is null
可以在num上设|默认?Q确保表中num列没有null|然后q样查询Q?br />select id from t where num=0
3.应尽量避免在 where 子句中?=?lt;>操作W,否则引擎放弃用烦引而进行全表扫描?
4.应尽量避免在 where 子句中?or 来连接条Ӟ否则导致引擎放弃用烦引而进行全表扫描,如:
select id from t where num=10 or num=20
可以q样查询Q?br />select id from t where num=10
union all
select id from t where num=20
5.in ?not in 也要慎用Q否则会D全表扫描Q如Q?br />select id from t where num in(1,2,3)
对于q箋的数|能用 between ׃要用 in 了:
select id from t where num between 1 and 3
6.下面的查询也导致全表扫描:
select id from t where name like '%abc%'
若要提高效率Q可以考虑全文索?
7.如果?where 子句中用参敎ͼ也会D全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将讉K计划的选择推迟到运行时Q它必须在编译时q行选择。然而,如果在编译时建立讉K计划Q变量的D是未知的Q因而无法作为烦引选择的输入项。如下面语句进行全表扫描:
select id from t where num=@num
可以改ؓ强制查询使用索引Q?br />select id from t with(index(索引?) where num=@num
8.应尽量避免在 where 子句中对字段q行表达式操作,q将D引擎攑ּ使用索引而进行全表扫描。如Q?br />select id from t where num/2=100
应改?
select id from t where num=100*2
9.应尽量避免在where子句中对字段q行函数操作Q这导致引擎放弃用烦引而进行全表扫描。如Q?br />select id from t where substring(name,1,3)='abc'--name以abc开头的id
select id from t where datediff(day,createdate,'2005-11-30')=0--?005-11-30’生成的id
应改?
select id from t where name like 'abc%'
select id from t where createdate>='2005-11-30' and createdate<'2005-12-1'
10.不要?where 子句中的?”左边进行函数、算术运或其他表达式运,否则pȝ可能无法正用烦引?
11.在用烦引字D作为条件时Q如果该索引是复合烦引,那么必须使用到该索引中的W一个字D作为条件时才能保证pȝ使用该烦引,否则该烦引将不会被用,q且应尽可能的让字段序与烦引顺序相一致?
12.不要写一些没有意义的查询Q如需要生成一个空表结构:
select col1,col2 into #t from t where 1=0
q类代码不会q回Ml果集,但是会消耗系l资源的Q应Ҏq样Q?br />create table #t(...)
13.很多时候用 exists 代替 in 是一个好的选择Q?br />select num from a where num in(select num from b)
用下面的语句替换Q?br />select num from a where exists(select 1 from b where num=a.num)
14.q不是所有烦引对查询都有效,SQL是根据表中数据来q行查询优化的,当烦引列有大量数据重复时QSQL查询可能不会d用烦引,如一表中有字DsexQmale、female几乎各一半,那么即在sex上徏了烦引也Ҏ询效率v不了作用?
15.索引q不是越多越好,索引固然可以提高相应?select 的效率,但同时也降低?insert ?update 的效率,因ؓ insert ?update 时有可能会重建烦引,所以怎样建烦引需要慎重考虑Q视具体情况而定。一个表的烦引数最好不要超q?个,若太多则应考虑一些不怋用到的列上徏的烦引是否有必要?
16.应尽可能的避免更?clustered 索引数据列,因ؓ clustered 索引数据列的序是表记录的物理存储序Q一旦该列值改变将D整个表记录的序的调_会耗费相当大的资源。若应用pȝ需要频J更?clustered 索引数据列,那么需要考虑是否应将该烦引徏?clustered 索引?
17.量使用数字型字D,若只含数g息的字段量不要设计为字W型Q这会降低查询和q接的性能Qƈ会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字W,而对于数字型而言只需要比较一ơ就够了?
18.可能的使用 varchar/nvarchar 代替 char/nchar Q因为首先变长字D存储空间小Q可以节省存储空_其次对于查询来说Q在一个相对较的字段内搜索效率显然要高些?
19.M地方都不要?select * from t Q用具体的字D列表代曎?”,不要q回用不到的M字段?
20.量使用表变量来代替临时表。如果表变量包含大量数据Q请注意索引非常有限Q只有主键烦引)?
21.避免频繁创徏和删除时表Q以减少pȝ表资源的消耗?
22.临时表ƈ不是不可使用Q适当C用它们可以某些例程更有效,例如Q当需要重复引用大型表或常用表中的某个数据集时。但是,对于一ơ性事Ӟ最好用导?
23.在新Z时表Ӟ如果一ơ性插入数据量很大Q那么可以?select into 代替 create tableQ避免造成大量 log Q以提高速度Q如果数据量不大Qؓ了缓和系l表的资源,应先create tableQ然后insert?
24.如果使用C临时表,在存储过E的最后务必将所有的临时表显式删除,?truncate table Q然?drop table Q这样可以避免系l表的较长时间锁定?
25.量避免使用游标Q因为游标的效率较差Q如果游标操作的数据过1万行Q那么就应该考虑改写?
26.使用Z游标的方法或临时表方法之前,应先LZ集的解决Ҏ来解决问题,Z集的Ҏ通常更有效?
27.与时表一P游标q不是不可用。对型数据集?FAST_FORWARD 游标通常要优于其他逐行处理ҎQ尤其是在必d用几个表才能获得所需的数据时。在l果集中包括“合计”的例程通常要比使用游标执行的速度快。如果开发时间允许,Z游标的方法和Z集的Ҏ都可以尝试一下,看哪一U方法的效果更好?
28.在所有的存储q程和触发器的开始处讄 SET NOCOUNT ON Q在l束时设|?SET NOCOUNT OFF 。无需在执行存储过E和触发器的每个语句后向客户端发?DONE_IN_PROC 消息?
29.量避免大事务操作,提高pȝq发能力?
30.量避免向客Lq回大数据量Q若数据量过大,应该考虑相应需求是否合理?
具体的SQL语句在很多情况下需要结合实际的应用情况来写Q这里不作叙q?/p>
p更多的时间在前期的设计上Qƈ通过团队q程来完成。在某种E度上,XP采用协作设计会议的方?/SPAN>-在团队开始编写品代码时Q大多数关键的设计决{已l完成?BR>书面文档也能减少对结对编E和团队同在一地的需求?/SPAN>