你不一定會做的簡單運算題-已廢除


會做的錯題
這個我會,可是我做錯了。越是簡單的事情越容易忽視,這就是習慣性錯誤。也就是這樣引入了今天這個一道簡單的運算題。
有這樣經歷的應該不止我一個,看到此題目進來的朋友你是否也曾有過在考試時做錯,卻在試后大嘆,這個題這么簡單,我怎么就做錯了,實在不應該。我們常常總結為馬虎,其實是一個習慣,可能是視覺習慣引起的類似錯誤,也可能是意識上的輕視引起的錯誤,總之這些情況下的錯誤我們是可以避免的,可是今天我們還是必須來回顧一道簡單的運算題。
本文原創博客地址:http://www.cnblogs.com/unofficial官網地址:www.pushself.com)
錯題起因
A:問你一個簡單的問題?
B:我現在有些忙,你把問題發給我看看
A:這個題很簡單,不許敲代碼,請直接把答案寫在腦海里。(接下來參與這個題無需使用身邊的鍵盤,直接心算即可)
A:
$a = 5;
echo $a + ($a++) + (++$a);
B:這么簡單一個題你都不會啊? 5+5+7=17,輸出17!
A:你確定?
B:我確定!
A:你自己敲代碼試一下。
於是乎B就在瀏覽器console下敲了這樣一句代碼:
var a = 5;
console.log(a + (a++) + (++a));
本文原創博客地址:http://www.cnblogs.com/unofficial官網地址:www.pushself.com)
你應該可以猜到運算結果是什么,B就截圖給A了,過了一會兒A也截圖給了B。這個時候B開始意思到了這其中肯定有文章,用PHP寫了一遍代碼,運算結果不一致,看了一下也沒有發現其中有什么問題,盡可能學會自己解決問題,決定開始查閱一下PHP手冊。
PHP中運算原來是這樣的
來源於官方文檔中的一個Example:
<?php
$a = 1;
echo $a + $a++; // may print either 2 or 3
?>
為什么注釋是may print either 2 or 3?
因為是// mixing ++ and + produces undefined behavior
可是結果嘗試還是等於3,我有些不明白2是怎么得到的,請知曉的小伙伴指教。PHP在運算上原來還有這樣一個坑,我跳下去了,你就不要跳了,免得壓傷了我。
按照PHP運算優先級先運算了$a++ = 1;此時$a的值經歷了自加1后變為$a = 2;於是2+1=3。
我在坑中等你放下繩索
嘗試了JS,C#結果都是2,能明白其中細節的小伙伴不妨與我探討一下,還有其它的坑也不妨拿出來分享一下。
本文原創博客地址:http://www.cnblogs.com/unofficial官網地址:www.pushself.com)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM