【发布时间】:2011-06-26 05:41:41
【问题描述】:
将 bool 转换为 byte 的最快方法是什么?
我想要这个映射:False=0, True=1
注意:我不想使用任何if 语句或其他条件语句。我不希望 CPU 停止或猜测下一条语句。
更新: 对于那些想看到这个问题的重点的人。 这个例子展示了如何从代码中减少两个 if 语句。
byte A = k > 9 ; //If it was possible (k>9) == 0 || 1
c[i * 2] = A * (k + 0x37) - (A - 1) * (k + 0x30);
【问题讨论】:
-
如果
x ? 1 : 0对你来说真的太慢了,那么你真的需要重新检查你想要做什么。如果该级别的转换每秒发生数千万次(它会显着影响性能的唯一方式),那么您为什么不使用 ASM 或其他方式编写它呢?只有这样,您才能在速度上明显击败x ? 1 : 0。 -
当其中至少有一个(可能有两个)不必要的乘法时,条件“需要优化”有点有趣;-)(但归根结底......它. 只是. 没关系。)另一种方法可能是使用 可以 优化为单跳的开关——不确定是 C# 还是 JIT 做到了。还有一种方法是查找表。呸! :)
-
@Amir:这是完全有效的,而且经常有用,因为其他人指出你在找错树。没有人试图以不专业的方式对待您;你有很多人试图给你建议,这样你就可以 a) 不要把时间浪费在无意义的优化上,b) 更有效地使用这个网站。我们中的许多人都惊讶地看到这个问题被问到,这可能会在我们的 cmets 中遇到。但是,如果您从非防御的角度阅读它们,您会发现没有人侮辱您,只是就您的问题提出建议。这就是 Stack Overflow 的用途。
-
“一个人应该保持沉默并学习” - 投票似乎是另一种选择。
-
@Amir:通常应该保持沉默和学习的人是寻求帮助的人。我们其他人试图提供建设性的信息,如果它是正确的,“不要这样做”是建设性的(并且非常有帮助)。如果有人向我展示了一种更好的方法来做某事,我不再关心让旧方法发挥作用了。
标签: c#