c# - 对负整数返回零

标签 c# bit-manipulation

一个 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/

相关文章:

c# - ASP.Net 尝试读取 xml 文件时, "An operation was attempted on a nonexistent network connection"

bit-manipulation - 逻辑右移、算术右移、循环右移的区别

c - 使用位运算符执行此操作

python - 在 Python 中,如何解析 3 个字节的第 11 位和第 12 位?

c# - 是否可以创建一个快捷方式来将未使用的 usings 删除到一个类中?

c# - 业务逻辑层和数据访问层 : circular dependency

c# - 在 .NET 多语言 Web 应用程序中验证名称的正则表达式

c# - 是否可以针对任意输入训练 Rhinomocks?

mysql - 为用户处理已读/未读帖子,例如 mysql 中的邮件

c++ - Bitshift - 需要解释才能理解代码