一位朋友只是抛出了一些类似于以下 C# 代码的代码:
int i = ...;
return i < 0 ? 0 : i;
这让我思考。有什么“不同”的方式来返回负整数零或当前正值?更具体地说,如果可能的话,我正在寻找按位运算。
顺便说一句,我知道Math.Max(0, i);
出了什么问题Math.Max
?
You can使用按位运算在没有分支的情况下执行等效操作:
r = x ^ ((x ^ y) & -(x < y)); // == max(x, y)
如果你替换零,它会折叠为:
r = (y & -(0 < y)); // == max(0, y)
(来源:这个清单 http://graphics.stanford.edu/~seander/bithacks.html#IntegerMinOrMax按位技巧。)
如果分支在你的平台上非常昂贵,我想这在某些内部循环中可能是值得的,但它非常晦涩,不是我想在外部遇到的那种事情。极其时间敏感函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)