在 C# 中是否可以将 bool
转换为 byte
或 int
(或任何整数类型,真的)分支?
换句话说,这还不够好:
var myInt = myBool ? 1 : 0;
我们可能会说我们想要将 bool
重新解释为底层 byte
,最好是用尽可能少的指令。目的是避免分支预测失败,如 here 所示。 .
最佳答案
unsafe
{
byte myByte = *(byte*)&myBool;
}
另一个选项是 System.Runtime.CompilerServices.Unsafe
,这需要非核心平台上的 NuGet 包:
byte myByte = Unsafe.As<bool, byte>(ref myBool);
CLI 规范仅将 false
定义为 0
并将 true
定义为除 0
之外的任何内容,所以从技术上讲可能无法在所有平台上按预期工作。然而,据我所知,C# 编译器还假设 bool
只有两个值,因此在实践中我希望它能在大多数学术案例之外工作。
关于C# 将 bool 重新解释为 byte/int(无分支),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58934996/