相关疑难解决方法(0)

如何在 C# 中将 bool 重新解释为 byte/int 而无需分支?

在 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++

c# boolean reinterpret-cast type-punning branchless

1
推荐指数
2
解决办法
1844
查看次数

标签 统计

boolean ×1

branchless ×1

c# ×1

reinterpret-cast ×1

type-punning ×1