昨晚顿开的茅塞……

作者:屈超(Chappell.Wat) 发布时间:February 28, 2006 分类:程式::五代,笔记::千草

注:真的不是“茅厕”……
取这个抬头真麻烦……
NND……

昨晚大叔研究 C 语言……
本想找出“ELSE IF”和“ELSEIF”的真正意义差别……
(因为实际使用效果是没有差别的……)
结果发现了一个以前从未注意过的问题:
“逻辑表运算符的优先次序 & 表达式的执行顺序”……

这两个问题综合到一起……
可以写出优美简洁的程式……
比如判断闰年:


$year = 1985;
if ((!($year % 4) && $year % 100) || !($year % 400)) {
echo "$year is a leap year.";
} else {
echo "$year is not a leap year.";
}
[/CoolCode]

得到的输出是:1985 is not a leap year.
(用脚趾头也能算出来吧……)
至于为何说程序很优美简洁呢?
大叔来分析一下:

首先,我们确定一点……
闰年是少于一般年份的……
所以程序应该倾向于“排除”……

其次,我们看 “||” 符号……
根据其特性……
当左边的“!($year % 4) && $year % 100”值为 True 时……
就用不着做右边“$year % 400”的真值判断……
(显然,能被 4 整除且不能被 100 整除的年份比能被400整除的年份要多得多……
这样可以最大限度的避免执行右边的真值判断……)

再次,再看左边的“&&”符号……
根据其特性……
当只有当左边的“!($year % 4)”为 True 时……
才需要做右边“$year % 100”的真值判断……
(再显然,能被 4 整除的年份要比不能被 100 整除的年份少得多……)
这样也可以最大限度得避执行右边的真值判断……

如此这般那么以后……
大伙是否懂了呢?

如果哪位高人有不同看法……
麻烦面刺寡人……
谢鸟……

标签: none

已有 6 条评论 »

  1. Celia Celia

    555555555
    我错了....

  2. Chappell.Wat Chappell.Wat

    已经惹到我的怎么办………………
    另外你是不是把我拉到黑名单了?
    小心我发飙喔……

  3. Celia Celia

    哎呀,好了咯!
    知道你最近火气重~~

    我不惹你!

  4. Celia Celia

    切!!
    我啊,就是太清楚你酱紫的性格了!
    早知道你要拽下子~~
    了不起啊,
    一游戏痴迷者的论坛而已!
    你把它当天堂那你上个够咯...

  5. Chappell.Wat Chappell.Wat

    是不是想问我要邀请名额啊?
    我是不会给你的!!!
    哼……

  6. Celia Celia

    冷冷清清呀...
    看来至今能超越沙沙滴高手还冒出现呀~

    对咯~
    沙沙,你有没有去过“人事部蛋蛋 ”那里玩啊??

添加新评论 »