类型转换在编程中非常重要,因为在大多数情况下,类型是不存在的,数据都是二进制形式存储的。但是为了更好的阅读性,很多情况下我们需要类型功能以及类型转换。
大多数语言都有一种将布尔值转换为整数的方法。在 python 中,您可以使用 int(value)
,在 JavaScript 中您无需关心此类需求,这样的例子不胜枚举。此外,从整数转换为布尔值并不难,您只需使用 value != 0
即可。这为除 0
之外的每个数字提供了 true
,这是您的选择(如果可以的话),您可能希望负数返回 false
,或者仅返回1
返回 true
,但这些都很容易实现。
Go 没有很好的方法来转换,因此本文分享七种使用 Go 语言将 bool 类型转 int 类型的方法。
方法一、最简单易懂的逻辑
func boolToInt(b bool) int {
if b {
return 1
}
return 0
}
方法二、性能最高的方法
func Bool2int(b bool) int {
// The compiler currently only optimizes this form.
// See issue 6011.
var i int
if b {
i = 1
} else {
i = 0
}
return i
}
为什么这段代码是七种方法中性能最好的,请参考这篇文章:https://0x0f.me/blog/golang-compiler-optimization/
方法三、使用switch
func convertViaSwitch(b bool) int {
switch b {
case true:
return 1
case false:
return 0
default:
panic("this doesn't really need to exist")
}
}
方法四和五、使用map
func convertViaMap(b bool) int {
table := map[bool]int{
true: 1,
false: 0,
}
return table[b]
}
var table = map[bool]int{
true: 1,
false: 0,
}
func convertViaMap(b bool) int {
return table[b]
}
方法六、使用list
var list = []bool{
false,
true,
}
func convertViaList(b bool) int {
return slices.Index(list, b)
}
方法七、快速平方根
float fastInvSqrt(float x) {
int i = *(int*)&x;
i = 0x5f3759df - (i >> 1);
float y = *(float*)&i;
return y * (1.5F - 0.5F * x * y * y);
}
这是《雷神之锤 III》中使用的一个令人拍案叫绝的算法,思路适用于很多语言,执行效率也仅次于官方优化过的方法二。