布尔值到整数的转换
本文关键字:转换 整数 布尔值 | 更新日期: 2023-09-27 18:26:16
有没有一种方法可以在没有条件语句(例如if语句)的情况下从布尔转换为整数?
int intValue = boolValue ? 1 : 0;
不,没有。您可以将这个条件隐藏在Convert.ToInt
之类的其他方法调用后面,或者更喜欢实际的if
之类的不同语法,但最终会有您的条件。
int intValue = Convert.ToInt32(boolValue));
尽管nvoigt的答案完全正确,但我可以再给你举几个例子,只是为了好玩
从来没有!永远不要使用此代码!它只是为了好玩或解决与(好)朋友的纠纷!)
首先,方法GetHashCode
发挥了神奇的作用(作为实现细节):
bool b = true;
int i = b.GetHashCode();
如果你想要一些更深奥的方法。。不客气):
bool b = true;
int i = ~(b.ToString()[0] / 2) & 1;
记住!从来没有!
使用Convert.ToInt32(boolValue)
一些可以玩的东西,尽管我不推荐它(需要为项目启用不安全代码):
internal static class Extensions
{
unsafe static public Int32 ToInt32(this bool value)
{
void* b = &value;
return *(Int32*)b;
}
}
这样使用:
var b = true;
Console.WriteLine($"{b}'t{b.ToInt32()}");
b = false;
Console.WriteLine($"{b}'t{b.ToInt32()}");
显示器:
True 1
False 0
它比?慢:操作员,但是:
var b = true;
int i = 0;
int iterations = 100_000_000;
Stopwatch sw = Stopwatch.StartNew();
for (int ndx = 0; ndx < iterations; ndx++)
{
i = b ? 1 : 0;
b = !b;
}
sw.Stop();
Console.WriteLine($"?:'t{sw.ElapsedMilliseconds} {i}");
b = true;
sw.Restart();
for (int ndx = 0; ndx < iterations; ndx++)
{
i = b.ToInt32();
b = !b;
}
sw.Stop();
Console.WriteLine($"cast't{sw.ElapsedMilliseconds} {i}");
我的系统为?报告85毫秒:操作,对于不安全的方法为180ms。