Archive for the '其他文章' Category

关于一些编程语言的运算符“优先级”

Tips:这个问题是铁军师兄发现并提出的,我写篇博客梳理一下。
当我们在学习一门编程语言的时候,我们经常会看到类似这样的一句话:运算符优先级是一套规则。该规则在计算表达式时控制运算符执行的顺序。具有较高优先级的运算符先于较低优先级的运算符执行。
那么事实是不是果真如此呢,下面让我们用Javascript等几门语言为例来验证一下。
首先,在官方的ECMA-262/Core JavaScript手册以及权威的MDN Docs中,分别是这样介绍Javascript运算符优先级的:

All operators have a pre-defined execution priority or precedence. Within a given complex expression, operations will be performed in order of priority.

Operator precedence determines the order in which operators are evaluated. Operators with higher precedence are evaluated first.

两段介绍的意思大致是一样的,都是说运算符优先级决定了运算符执行的先后顺序。运算符优先级高的运算符会被先执行(计算)。我们以往的编程经验似乎也在告诉我们这是真理,然而请先看下面一段代码:

var a=1;
function fn(){
    console.log(a);
}
var b = a++ + fn();

按照Javascript官方手册上对运算符优先级的定义以及的运算符优先级表(如图所示或参考http://rx4ajax-jscore.com/ecmacore/operator/predence.html),我们可以推算运行结果:在最后一行代码中,由于函数调用的括号运算符“()”优先级比自增运算符“++”和算术运算符“+”都要高,所以会先被执行。所以在控制台中被log的a的值应该是1。而事实上,结果是2。这说明了什么?——虽然“()”运算符的优先级比“++”要来得高,但a++却先于fn()被执行。
javascript优先级
图节选自Javascript运算符优先级表(http://rx4ajax-jscore.com/ecmacore/operator/predence.html)
那么在Javascript中是这种状况,在其他语言中又会是什么情况呢?随后,我们分别测试了PHP、C/C++、Java以及C#版本的代码(Python和Ruby中没有自增运算符)。猜猜结果各是什么?
PHP版:

$a=1;
function fn($a1){
    echo $a1;
}
$b = $a++ + fn($a);

C++版:

#include "stdafx.h"
#include <iostream>
using namespace std;
int fn(int a1)
{
	cout<<a1;
	return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
	int a = 1;
	int b = a++ + fn(a);
	int i;
	cin>>i;
	return 0;
}

揭晓答案:
只有C/C++输出了1,其他语言都输出了2。
这样看来似乎最传统的编译型语言C/C++能得出与其运算符优先级定义相符合的结果。而事实上关于运算符优先级,PHP手册是这样定义的:

The precedence of an operator specifies how “tightly” it binds two expressions together.

意思是运算符优先级决定了两个表达式之间“紧密程度”——也就是说代码的组合方式。这么一来PHP为什么输出2就能解释了。而C#和Java的代码,如果这么解释也能解释得清楚。不过在Java的运算符中,并没有函数调用的“()”运算符。C#当中却是有的。更有趣的是,在C/C++中,前自增/减运算符“++/–”的优先级居然排在了函数调用运算符“()”的前面,仅次于“::”运算符。
结论:混乱啊。。

饭鱼一刀

添香楼?名闻天下的添香楼?因一道“游鱼戏水”而惊动大内御厨的添香楼?有先帝御赐“添香夜宴天下绝”的添香楼?
是的,正是此添香楼。楠木为栋,梨木为梁,上下三层,一十二间。间间铁木为桌,铁木为凳,汇聚天下名贵瓷器的添香楼。
听说添香楼早以不复当年盛况,那些瓷器早在战火中毁坏殆尽,那些曾经光亮如镜的铁桌也早已被金兵的铁剑划出了道道刻痕。
那些又算得了什么?只要饭鱼还在,添香楼就永远是添香楼,添香楼的游鱼戏水就永远失传不了。
听说他昔年做“添香夜宴”曾引得万人空巷一时传为美谈,可惜自金兵破城后就再也没有听说过他的名字。莫非,他又出现了?
寒门柴草贫家事,锦衣华服帝王家。
越过紫环朱漆的大门,穿过雕梁画柱的回廊,修竹摇曳的一座庭院出现在眼前。
四面青石案几,几上清水一盅,盅后各坐一人。
人,众人皆默,目注场中。
一张永远看不出表情的脸,一双冷冰冰不沾尘事的眼,一双拢在袖中看不见指甲的手。
灶塘里没有火,铁锅里没有油,厨子手里没有铲,这样怎能做出菜?
火升起来了,一尺长五寸宽在八月的烈日下暴晒整整一个月的一点就着的凤梨木,红通通的火苗生起来足有一丈高。
油下了锅了,一两二钱银子一两的脆香坊今晨刚运到的阳光照射时间最长雨水最好秦岭芝麻酿出的小磨香油,倒一滴进锅里逸出的香味足可以飘出三层楼。
铲?没有铲。饭鱼做菜从不用铲。用铲做出的菜也绝不是饭鱼做的。饭鱼擅长一柄五寸三分薄刃带弯滴水不沾的小刀,用时手出袖刀出手,片刻之间挥划而就。
一斤二两一条的青鱼,肉白质嫩,刚由渔夫自水清见底的昙溪捕了送来。养在青釉蓝瓷白底的圆盆里,跳跃之间,便似有三斤的鱼性。
火,越烧越旺;油,四溅散香。
饭鱼已经站在了鱼盆前。青鱼似乎预见到自己的命运,在盆里不安分的游动,越游越快,终至跳动起来。就在青鱼跳起来又将落入盆中的一刹那间,衣袖挥动,刀已出手。
随着溅起的油香,片片鱼球便如雪片似滚入锅中。饭鱼刀未入袖,就势转身,以迅捷无比的动作将葱、姜、蒜、盐、糖抖入锅中。
芳香四溢,鱼已就碗。
饭鱼一脸平静的站在那里。那姿势,竟仿佛未动分毫。
“好!饭鱼一刀果不其然!”说话之人一身紫裘裹住健硕的身材,四方脸,浓眉,一双眼虽在笑中仍如有雷霆之火,不怒而威。正是当日率兵攻破京师的大将军宗恕。
“宗将军有所不知,饭鱼神技不仅在此,请将军移步。”站在宗恕身边之人一身蓝衫,青巾裹头,观其面貌本当极为俊朗,却因带有一股阿谀奉承之气,整个人气势顿时减了几分。
“哦,莫非还有奥妙不成?玉林你倒知道的清楚!”宗恕随玉林来到围宴中间。
青釉蓝瓷白底的圆盆里,青鱼竟娓娓而游。
水清,瓷白,鱼青,随着鱼尾的晃动,清水,白瓷,青鱼仿佛都在动,都是富有生命力的。
宗恕不由睁大了双眼。
“将军请再看这里。”玉林躬身一揖。
白玉碗里,一粒粒滚圆的鱼球竟像被一只无形的手操纵,在热油翻滚中成一个圆环在碗里转动。
“真神技也!”
“将军请回座。”饭鱼端起白玉碗。
“闻这香味已足够回味三生,想必吃起来更是冠绝天下。今天宗某有幸要一尝为快了。哈哈哈哈!”
宗恕回到座位之上。“玉林,听说这道菜名为‘游鱼戏水’……”
正说话间,饭鱼将白玉碗端至宗恕面前。
“这就是‘游鱼戏水’?”宗恕似乎有点失望,原来盛名之下未必是真。碗中鱼球浑圆,何来游鱼之说?但方才看他挥刀破鱼,鱼仍可游动也可称绝天下了。
“将军请借此盅中水一用。”青石雕成的水盅就在宗恕的案上。盅中盛自玉泉山中新取之水,清冽透亮,甜而不浮。
“请!”
饭鱼将盅中清水缓缓注入白玉碗中。
仿若奇迹,原本浑圆天成的鱼球竟慢慢舒展开来,渐至展成鱼形,头,尾,身,翼,无不俱全,在水中翕张游动,仿若天生。而玉碗中油则滴滴如雨滴荷叶般浮在水上。
青釉蓝瓷白底的圆盆,一斤二两一条的昙溪青鱼。盆,还是那个盆;鱼,也仍是那条鱼。
水,清澈见底;鱼,娓娓游动。
四个锦衣裘服的人围着圆盆坐了足足有一个时辰。
“好鱼!”
“好刀功!”
“手非常稳!”
“冷静得可怕!”最后开口的,正是紫衫裘服的大将军宗恕。
“当时在场的,连我在内一共二十五人,他们分别站在饭鱼前后左右不到五丈的不同位置,可说从任何一个角度都绝对可以看清他的出手;这二十四人无论武功,身手,眼力都可说是铁卫队里百中挑一的好手,我相信即使我施展全部的武功也绝难逃过这二十四人的围攻,就算我逃过他们的围攻我施展的武功招式也必定落入他们的眼睛;更何况我就坐在离饭鱼最近的地方,这个位置是我精挑细选的,我确信只要他手一出袖我必定能看清楚他的招式。可惜……”
“可惜?”
“可惜!可惜这二十四人并我在内竟未能看清他的招式。”宗恕一声长叹。
“哦?”
“当时我已感到他的刀气,生冷,凌厉,当他的手挥动时我几乎要一跃而起,我告诉自己,如果他鱼刀一出,我将避无可避。”他似乎又看见了饭鱼那一刀。
“他有三次机会均未出手?”
“是的,三次。仅有的三次机会,但……”
“但你并未感觉到一丝杀气,既没有杀气他当然也就不会出手,你又何必戒备?”
说话之人身倚窗棂,背对众人,黑发束起,腰肢细长挺直,身上披一件团云盘龙的金黄长袍,语声轻而带有一种威仪。这人自打他们进屋就一直未动身形。但是,即使他没有移动过一分,在坐的每一人也都觉得他在看着自己,就仿佛他的后背上也长着一双眼睛,这眼睛就盯着自己。
“是,他未动,臣也不敢擅动。” 宗恕小心翼翼。
“先发制人,后发则受制于人。宗恕呵宗恕,昔**领奇兵孤军直下,铁蹄所到之处无不披靡,而今你的雄风安在?你何时变得谨慎起来了?”年青人转了过来,一张苍白的脸上竟没有年轻人应该有的朝气。他的脸上虽也含着笑意,但这笑意却并没有到达他的眼中,这令他的笑容也生冷了许多。
“臣不敢不谨慎。”身形健硕的宗恕在他面前竟也仿佛矮了一截,宽阔的额头上竟冒出了滴滴的冷汗。
“我大金开疆裂土靠的是英勇无畏,若都似宋人怯弱怕战,今日之宋都又岂是我等能踏足的?”年青人目光在四人脸上一转,四人均暗觉心中一凛,暗想“我圣宗当可算上目光如炬了。”
“朝闻道,夕可死。能见识破鱼一刀,又岂畏死?”年青人目注宗恕。
“滋味如何?”年青人将头复转了出去。窗外暗黑的夜色中开始飘起了雪。
“鲜美润滑,单是那精美已足膛目。”
“飞雪一落,河面结冰,青鱼将难以捕捉。宗恕,叫饭鱼后日进宫来罢。”年青人挥手令四人退出屋外。
“玉林,你已是第几次看饭鱼做菜了?”良久,圣宗缓缓道。
“禀圣宗,已是第三次了。”清秀俊朗的玉林一身蓝衫未变,不知何时出现
在屋里。而屋里的四角也早已升起炭火,令得整间屋子温暖如春。
“仍是一无所获么?”
“圣宗,玉林无法看出破绽。”
“你看!”圣宗伸出一只手。他的手,修长细致,手指曲伸,两指中夹着一条青鱼。
玉林看着他手中的那尾青鱼。一斤二两的青鱼纵然离开了水也有二斤的鱼性,此刻夹在圣宗左手的两根手指中间竟动弹不得。圣宗右手轻轻在鱼身抚过,只见鱼身两边各竖起三道被刀划出后掀起的鱼鳞,鳞未散而鱼肉已缺。
“挥刀,破鱼,成球,入锅,仅在一瞬之间。”圣宗手指一抖,已将青鱼弹入盆中,鱼入水,而滴水未溅。
“鱼身划了6刀而鱼似未损,此人刀功非凡。”圣宗以一条雪白的手绢搽拭手指。“据说徽宗曾品尝过他的游鱼戏水,并赐字?”
“是。”
“徽宗书画妙绝天下,可惜因画误国,如今在五羊城虽身陷樊笼但仍可作画,也算对得起他了。”
“是,圣宗仁慈。”
“听说你曾在徽宗身边服侍?你看我比之徽宗何如?”
“玉林不敢。玉林虽曾服侍徽宗但为远侍,只在殿外伺候,徽宗与圣宗……不可同日而语。”玉林一直低垂着头。
“是么?……你也下去吧。”
“圣宗……”
圣宗意兴阑珊,竟似再也不愿多说一个字,挥挥手径自往屋里走去。
雪白的绢纸。
未干的墨迹。
一枝湖州钟氏所做玉管小毫横陈纸上。
画中,是一树傲雪而开的白梅。遒劲的枝干,乍开的梅花,凌乱的雪花。
雪花虽乱,但又怎及人的心乱?
圣宗站在窗前,似有千头万绪,想仰首一啸,欲振臂一呼。
多少日了,那种独立云霄罕匹敌手的感觉。
冬月初三。雪住,风冷。
圣宗在玉华殿。
四面屏风围住寒风,殿内温暖如春。
新锅已架起,凤梨木噼里啪啦烧得正欢,青鱼在圆盆里自由自在的游来游去。
白玉碗,青石盅一一摆在案上。
宫中的太医过来用银针一一试探,他逐一细致地检查了每一件器皿,向立在一边的铁卫首领摇了摇头,退下。
圣宗对眼前的一切很满意。
他一直很想亲眼看一下饭鱼。此刻饭鱼就站在他面前的台阶下。样貌并不太出众,身材也只是中等,一双眼睛细长。此刻他正用一种平静而内敛的眼光看着自己。他突然觉得自己找到了一直在寻而未得的某种东西。是什么?脑海里一闪而过,却无法抓住。
“饭鱼,你可以开始了。”玉林看了看圣宗,圣宗的眼睛里有某种期待。
饭鱼转身向灶边走去。他的步伐稳重而坚定,每一步跨出的都是那么的自然,充满了信心。
青鱼跳起,饭鱼袖挥手动刀出,鱼球落入锅中,青鱼落回水中。一切是那么的自然。
圣宗双目盯着饭鱼的衣袖。
调料,盛碗,做汤,一气呵成。
“游鱼戏水!”圣宗看着眼前的鱼球慢慢舒展。白玉碗里,六条饭鱼活灵活现的游动,油滴在水上轻盈的晃动,眼前简直是一个绝美的奇迹,又教人怎生下箸?
生似不忍破坏这一切,圣宗素手一拈,一滴鲜汤落入喉中。
就在此刻,饭鱼衣袖一挥,手已探出。就在他动的同时,圣宗突然也动了,素手连弹,后发而先至已一击点在饭鱼胸前。
“哦?”圣宗一惊,手往回缩。
就在他手将缩未缩之际,玉林已如猛虎扑林一跃而来。手中霍然一柄锋利至极的薄刃宝刀。
刀身直没至背。
“护驾!”站在殿下的铁卫首领大声道。宗恕等并殿外的铁卫蜂拥而至。
“你?”
“为什么?”圣宗的语气中有着太多的不相信与愕然。
“玉林,孤王自问待你不薄,自你入宫以来孤王对你信任有加,你为何背叛孤王?”
“饭鱼,你为什么要这么做?”圣宗看着在铁卫的剑戟下已满身血痕的两人。
“饭鱼你的手艺天下无双,只要你愿意,孤王可以封你为御厨,搜罗天下珍禽供你尽情发挥,你尽可以创造出诸如游龙戏水,单凤朝阳这样的旷世奇菜,你的绝技将名列膳食谱,你的盛名将代代相传,你可愿归顺我大金?”
“孤王一向爱才惜才,只要你二人降服,孤王对今日之事可以既往不咎。”
“我只有一事不明,尚盼告之。”良久,圣宗道。
“你的刀功破鱼是为一绝,以宗恕之眼力,原可断定饭鱼绝非会武功之人,你明知宗恕乃我大金一员猛将,他一生乃是在戎马中度过,统领军士无数,可谓阅人无错,你为何要显露你的刀功?如果你在宗恕府不施展出来,我原本不会在意你挥刀的动作,更想不到你原来丝毫不会武功。”
饭鱼浅笑,他松开了一直紧握住的手,也就是他方才在案前突然挥动引起圣宗随之而动的手。
饭鱼的手由于常年握刀变得坚毅无比,短而粗的手指上充满了力度。
此刻在他摊开的手掌中间并没有握有鱼刀,而是轻柔的握着一条饭鱼,一条以青鱼肉挥划而做成的游鱼。
原来他方才挥手只不过是自碗里取了一条游鱼。
“我明白了,你知我定然防你,故意取鱼吸引我视线,好教玉林一击得中。可惜你计谋虽好,孤王早已洞悉其谋,否则,又岂会容你近孤王身侧?”圣宗苍白的脸上此刻由于兴奋而变得红润。
“至于你,玉林,你又岂是孤王敌手,你刺向孤王的一剑又岂能伤孤王分毫?”圣宗双臂一振,玉林插在他背上的短剑已抖落地上。
“玉林,你又有何话说?”他得意的转向玉林。
“金贼毁我河山,残我百姓,凶行历历,凡我大宋百姓人人恨不得食汝之肉,可恨我功亏一篑,未能斩杀你于刀下!”玉林恨恨地将目光转向一旁。
“可惜你宋朝无人,我大军到处无不披靡,那继任的新君已躲在新都向我俯首称臣,你二人又何必在此枉送性命?”圣宗面色数变。
“你错了。我大宋义士就如过江之鲤斩杀不尽,我二人不过是马前小卒而已!”
“义士?是,汉人崇尚此风。可惜天佑我大金,你们的计谋终是不能得逞。”圣宗以睥睨的目光忘向二人。“我还可给你们一次机会。”
“休要得意!只我二人就可将你杀死!”一直没有开口的饭鱼道。
“是么?”圣宗一脸的不信。他注目饭鱼。
突然,他又看到了饭鱼眼中那种平静而内敛的神色,那种稳重而坚定,充满了信心的表情。
是什么环节出了错?有什么他没有注意到的细节?圣宗的内心不安起来。玉林转首看向饭鱼,神色开始平静,再不复刚才的冲动。
电光火石之间,圣宗面色狂变,他跃下座椅一把抓住饭鱼衣领。“快说,你在鱼汤里下了什么?”
“鲜汤一碗入君喉,包君无愁亦无忧。”饭鱼曼声轻吟。
“快说!”铁卫的剑戟再次抵住二人。
“一碗鱼汤就叫圣宗变了颜色,可笑啊可笑。圣宗自以为会万寿无疆么?”玉林看着他,饭鱼的笑容原也可以这么洒脱的。
“至毒之毒,无药可解!”玉林的嘴角含着冷笑。
“饭鱼!”圣宗心念数转,终颓然放弃。
“圣宗!”宗恕等人跪倒在大殿上。
“将此二人斩首,添香楼夷为平地。”圣宗坐回座椅,望着被拖走的二人,神色渐复平静。
“游鱼戏水自此失传矣!可惜我朝无此智勇双全之侠士。宗恕听令,示众三日后将二人盛殓。

三日后,金圣宗 殁。