1. 程式人生 > >程式設計之各種奇技淫巧

程式設計之各種奇技淫巧

當眾生踏上這條路,眼前是一片迷霧,只因為Bug太多,各種奇技淫巧小W早已見怪不怪,這裡就給大家分享下。


判斷一個數n是否是2的冪(n為正整數)

最樸素的想法就是不斷取餘和除2,看看能不能到1:


高階一點的,程式設計之美上提到過一種位運算的解決辦法:


奇技淫巧:


什麼?這樣也可以?不管你信不信,回去試試就信了(至於為什麼可以在搜狗測試公眾號裡和小W討論或者等下週同一時間小W來揭曉)。

經典面試題不開空間交換兩個整數的值

這裡就不一一貼程式碼,最簡單就是加法,不過有溢位的風險現在去面試的孩子基本都都不用了。

然後就是曾經很經典現在已經爛大街異或用法,這個大家應該也很熟悉,這時可能有人會有疑問難道這個還有什麼別的巧法?

抱歉這裡小W智商不夠見識面也還不夠廣真心不知道,那要說什麼呢?這裡要講的是一位童鞋的寫法:


看到這小W也是醉了泥煤你還真能節約紙張啊。不過不建議各位童鞋採用這種寫法否則被老大直接從窗戶扔出去本人概不負責不好懂不說還不符合標準c++的規範同一變數在一個語句中被改變了兩次)。

等等到這還不算完,有童鞋就告訴我他有更簡單好懂的方法,而且用加法就可以,納尼小W又要漲見識了,下面就看看這位童鞋的大作:


這。。。我就不多說什麼呢,但願你不會被老大從窗戶扔出去。不知道這位童鞋用的什麼編譯器,反正正常環境下是不可能起到交換作用的,可能是比較高階的人腦編譯吧。

好了,為了避免大家地鐵做過了站或者影響了睡眠時間,這裡就不多說了,留給大家一個思考題

吧:

在標準編譯環境下

int b = 5;

(++b) + (++b) + (++b)

結果是多少?

不要急著回答我,回去在VS上試試(友情提醒,學過資料結構的可以回憶下當時的那個運算子優先順序的實驗)。

欲知後事如何,請關注搜狗測試公眾號,下次再給大家分享~

原文連結

如需轉載該篇文章,請註明來自“搜狗測試”