Pac*_*aco 6 c# integer-overflow bit-shift
我希望alwaysPositive被分配一个正数,其中包含lareValue1和largeValue2的所有可能值(这些值至少为1).
以下语句导致缓冲区溢出:
int alwaysPositive = (largeValue1 + largeValue2) / 2;
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过减去和添加来阻止它:
int alwaysPositive = largeValue1 + ((largeValue2 - largeValue1) / 2);
Run Code Online (Sandbox Code Playgroud)
但在其他编程语言中,我可以使用无符号位移来实现这一诀窍:
int alwaysPositive3 = (largeValue1 + largeValue2) >>> 1;
Run Code Online (Sandbox Code Playgroud)
我怎么能在C#中做到这一点?
以下答案都解决了这个问题.可能有很多方法可以做到这一点,但它们(包括我的解决方案)都有一个共同点:它们看起来都是混淆的.
您可以使用单位:
uint alwaysPositive = (uint)(largeValue1 + largeValue2) / 2;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4359 次 |
最近记录: |