我希望alwaysPositive能夠爲lareValue1和largeValue2(至少是1)分配一個包含所有可能值的正數。我可以使用無符號右移防止C#中的整數溢出嗎?
下面的語句導致緩衝區溢出:
int alwaysPositive = (largeValue1 + largeValue2)/2;
我知道我可以阻止它通過減去並添加:
int alwaysPositive = largeValue1 + ((largeValue2 - largeValue1)/2);
但在其他編程語言,我可以用一個無符號位位移做技巧:
int alwaysPositive3 = (largeValue1 + largeValue2) >>> 1;
我該如何在C#中做到這一點?
下面的答案都解決了這個問題。可能有很多方法可以做到這一點,但它們(包括我的解決方案)都有一個共同點:它們都顯得模糊不清。
原諒我的無知,但你爲什麼要這樣做呢? – 2008-09-22 20:53:05
我試圖做到這一點的原因是重新發明輪子:實現二分查找。爲什麼我會寫我自己的版本?我不知道... – Paco 2008-09-22 21:43:39
只是FYI,你的代碼示例做了不同的事情。我想你想在第一個括號。 PS。您的靈感來自http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html嗎? – 2008-09-23 01:14:51