admin管理员组

文章数量:1033382

Go 语言 bool 类型转 int 类型的七种方法

类型转换在编程中非常重要,因为在大多数情况下,类型是不存在的,数据都是二进制形式存储的。但是为了更好的阅读性,很多情况下我们需要类型功能以及类型转换。

大多数语言都有一种将布尔值转换为整数的方法。在 python 中,您可以使用 int(value),在 JavaScript 中您无需关心此类需求,这样的例子不胜枚举。此外,从整数转换为布尔值并不难,您只需使用 value != 0 即可。这为除 0 之外的每个数字提供了 true,这是您的选择(如果可以的话),您可能希望负数返回 false,或者仅返回1 返回 true,但这些都很容易实现。

Go 没有很好的方法来转换,因此本文分享七种使用 Go 语言将 bool 类型转 int 类型的方法。

方法一、最简单易懂的逻辑

代码语言:javascript代码运行次数:0运行复制
func boolToInt(b bool) int {
    if b {
        return 1
    }
    return 0
}

方法二、性能最高的方法

代码语言:javascript代码运行次数: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
}

为什么这段代码是七种方法中性能最好的,请参考这篇文章:/

方法三、使用switch

代码语言:javascript代码运行次数:0运行复制
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

代码语言:javascript代码运行次数:0运行复制
func convertViaMap(b bool) int {
    table := map[bool]int{
        true:  1,
        false: 0,
    }
    return table[b]
}
代码语言:javascript代码运行次数:0运行复制
var table = map[bool]int{
    true:  1,
    false: 0,
}

func convertViaMap(b bool) int {
    return table[b]
}

方法六、使用list

代码语言:javascript代码运行次数:0运行复制
var list = []bool{
    false,
    true,
}

func convertViaList(b bool) int {
    return slices.Index(list, b)
}

方法七、快速平方根

代码语言:javascript代码运行次数:0运行复制
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》中使用的一个令人拍案叫绝的算法,思路适用于很多语言,执行效率也仅次于官方优化过的方法二。

Go 语言 bool 类型转 int 类型的七种方法

类型转换在编程中非常重要,因为在大多数情况下,类型是不存在的,数据都是二进制形式存储的。但是为了更好的阅读性,很多情况下我们需要类型功能以及类型转换。

大多数语言都有一种将布尔值转换为整数的方法。在 python 中,您可以使用 int(value),在 JavaScript 中您无需关心此类需求,这样的例子不胜枚举。此外,从整数转换为布尔值并不难,您只需使用 value != 0 即可。这为除 0 之外的每个数字提供了 true,这是您的选择(如果可以的话),您可能希望负数返回 false,或者仅返回1 返回 true,但这些都很容易实现。

Go 没有很好的方法来转换,因此本文分享七种使用 Go 语言将 bool 类型转 int 类型的方法。

方法一、最简单易懂的逻辑

代码语言:javascript代码运行次数:0运行复制
func boolToInt(b bool) int {
    if b {
        return 1
    }
    return 0
}

方法二、性能最高的方法

代码语言:javascript代码运行次数: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
}

为什么这段代码是七种方法中性能最好的,请参考这篇文章:/

方法三、使用switch

代码语言:javascript代码运行次数:0运行复制
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

代码语言:javascript代码运行次数:0运行复制
func convertViaMap(b bool) int {
    table := map[bool]int{
        true:  1,
        false: 0,
    }
    return table[b]
}
代码语言:javascript代码运行次数:0运行复制
var table = map[bool]int{
    true:  1,
    false: 0,
}

func convertViaMap(b bool) int {
    return table[b]
}

方法六、使用list

代码语言:javascript代码运行次数:0运行复制
var list = []bool{
    false,
    true,
}

func convertViaList(b bool) int {
    return slices.Index(list, b)
}

方法七、快速平方根

代码语言:javascript代码运行次数:0运行复制
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》中使用的一个令人拍案叫绝的算法,思路适用于很多语言,执行效率也仅次于官方优化过的方法二。

本文标签: Go 语言 bool 类型转 int 类型的七种方法