一个 friend 只是扔了一些类似于下面的C#代码的代码:
int i = ...;
return i < 0 ? 0 : i;
这让我想到了。有任何“不同”的方式来为负整数或当前正值返回零吗?更具体地说,如果可能的话,我正在寻找按位运算。
顺便说一句,我知道 Math.Max(0, i);
最佳答案
Math.Max
有什么问题?
您可以使用按位运算在没有分支的情况下执行等效操作:
r = x ^ ((x ^ y) & -(x < y)); // == max(x, y)
如果您替换为零,它会折叠为:
r = (y & -(0 < y)); // == max(0, y)
(来源:位技巧的 this list。)
如果分支在您的平台上非常昂贵,我想这在某些内部循环中可能是值得的,但它非常晦涩,不是我希望在 非常 时间敏感函数。
关于c# - 对负整数返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1683029/