C# 将 bool 重新解释为 byte/int(无分支)

标签 c# int boolean reinterpret-cast branch-prediction

在 C# 中是否可以将 bool 转换为 byteint(或任何整数类型,真的)分支?

换句话说,这不够好:

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/

相关文章:

java - 为什么我在java中的 boolean 测试总是失败?

c# - 如何从其隐藏代码访问资源字典中的控件?

c# - 在 Appharbor 托管的网站上使用记录器的最简单方法是什么?

java - 将 ArrayList<Integer> 转换为 int[] 在 Java 中不起作用

java - DataBufferInt 无法解析为变量 [ err ]

javascript - 为什么这段代码没有按预期工作?

c# - 这个 VB.NET 代码是如何计算的?

c# - Windows 服务写入日志文件的权限

c# - 如何为脚手架注册自定义 EF Code First 迁移操作?

java - 在 Java 中将十进制数转换为十六进制字符串失败