在 C# 中是否可以在不分支的情况下bool将 a 转换为byteor int(或任何整数类型)?
换句话说,三元还不够好:
var myInt = myBool ? 1 : 0; // could compile to a branch
Run Code Online (Sandbox Code Playgroud)
我们可能会说我们希望将 a 重新解释bool为底层byte,最好使用尽可能少的指令。目的是避免分支预测失败,如下所示。
为了便于论证,我们假设 abool已经作为 0/1 存在于整数寄存器或内存中,而不仅仅是作为 FLAGS 中的比较结果。大多数现代 ISA 确实有一种无分支方式从 int 或 FP 比较中获取 0 或 1,因此我们希望 C# 使用它。或者,如果bool刚刚来自x<y,我们希望强制编译器将其具体化为整数,而不是变成count += myInt周围的分支count++。