<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[C++中运算符优先级的学习注解]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[生活笔记]]></category>
<pubDate>Wed, 09 Jul 2008 06:14:16 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	　　提起运算符的优先级，很多了解C++的过来人都会想：这有什么难的？不就是谁的优先级高就算谁么。确实如此，运算符的优先级不是一个大问题，但对于一个初学者来说，却经常轻易在上面迷糊与犯错。而对于一个了解C++的人来说，我相信也会偶然在上面摔倒，不信就继续往下读。 <br/><br/>　　“优先级高的先运算”带来的困惑　 <br/><br/>　　C++中运算符的优先级有一张表，表里把运算符进行了分类，这张表是不需要死记硬背的，只要有个大致的轮廓就OK了。例如应该记住最低优先级是逗号运算符，其次是赋值运算符，再其次是三目运算符。而关系运算符的优先级高于逻辑运算符（不包括逻辑非运算），算术运算符的优先级高于关系运算符，象++和﹣﹣的优先级比前面几个都高，但最高的要属（）了。知道这些后，你的脑海里一定有一条准则了：优先级高的先运算。那么下面看一个例子： <br/><br/>　　int x=1,y=0;　 <br/><br/>　　!x&amp;&amp;x+y&amp;++y;　 <br/><br/>　　上面的语句中出现了！、&amp;&amp; 、+、++这四个运算符，那么问题来了，到底先算谁呢？ <br/><br/>　　有一个姓蔡的同学站起来说，++运算符在这里面优先级最高，理所应当最先算++，既先计算++y，再算!x，再算x+y，最后把它们&amp;&amp;起来。按照蔡同学的思路，第二步的结果是0&amp;&amp;x+y&amp;&amp;1，由于&amp;&amp;是严格运算，有一个为0结果既为0，所以不需要计算x+y了，整个语句的结果是：假。按照上面蔡同学的说法，执行完后y的值应该是1了，这对不对呢？ <br/><br/>　　一位姓高的同学站起来反驳道，我觉得应该先计算!x，假如值为假，则不需要计算下去，最后结果为假。假如值为真，再计算x+y，同理假如其值为真，再去计算++y，否则最后结果也为假。 <br/><br/>　　蔡同学不服起来说，高同学你觉得++和!谁的优先级高呢？高同学答道，那当然是++高。蔡同学接着问，那为什么还要先计算!呢？高同学答不出来了。 <br/><br/>　　是呀，为什么要先算呢？ 三层交换技术 交换机与路由器密码恢复 交换机的选购 路由器设置专题 路由故障处理手册 数字化校园网解决方案 加括号确定优先级的方法　 <br/><br/>　　高同学说的是正确的，为什么呢？下面我给大家解释一下。当多个优先级不同的运算符在一起时，为了不混淆，可以先加上括号，这样就分出层次了，相同层次的考虑结合性问题，当确定下来先算那块时，再往这块里面深入。例如上面的例子，我们可以这样加上括号：从左向右看，由于!比&amp;&amp;优先级高，所以有(!x),又由于&amp;&amp;比+优先级低，所以有(x+y)，而++优先级高于&amp;&amp;，所以(++y)。这样整个式子就变成了：(!x)&amp;&amp;(x+y)&amp;&amp;(++y),最外层的是两个&amp;&amp;运算，由于&amp;&amp;的结合性是从左至右，所以上式可看成：A&amp;&amp;B&amp;&amp;C，先计算A，再计算B，最后算C。由于x=1,则!x就为假，后面的就不需要再算了，整个语句的值为假。执行完后，y的值没变，还是0。 <br/><br/>　　所以碰到不清楚先算谁后算谁时，先加个括号看看，就明白了先后次序。下面做一个加括号的练习：给语句c=a&gt;b?a:b;加括号。此语句有三个运算符：=、&gt;、? :，应该怎样加括号呢？ <br/><br/>　　第一种方案：c=((a&gt;b)?a:b);　 <br/><br/>　　第二种方案：c=(a&gt;(b?a:b));　 <br/><br/>　　第三种方案：(c=a)&gt;(b?a:b);　 <br/><br/>　　应该是那一种呢？按照运算符优先级的高低顺序，&gt;优先级高于=，所以不可能把(c=a)括起来。而&gt;优先级高于? :运算符。所以也不可能把(b?a:b)括起来。因此，第一种答案正确。 <br/><br/>　　下面再看一个类似的例子： <br/><br/>　　int i=8,j=4,k; <br/><br/>　　k=i <br/>　　猛然一看，有些人上来可能就要计算++i和++j了。这里不妨先加括号看看。从左至右看，&lt;的优先级高于=而且又高于? :，所以有k=(i <br/>　　所以运算符的优先级千万要小心，既不是想象的那么难，也不是想象的那么轻易。
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] C++中运算符优先级的学习注解]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>