我希望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