如何在golang中将bool转换为int8 [重复]

Posted

技术标签:

【中文标题】如何在golang中将bool转换为int8 [重复]【英文标题】:how to convert bool to int8 in golang [duplicate] 【发布时间】:2016-12-02 07:08:26 【问题描述】:
bitSet := true
var bitSetVar int8

如何将bitSet 分配给bitSetVar 作为1

我可以这样做:

if bitSet 
   bitSetVar = 1
 else 
   bitSetVar = 0

这是最好的方法吗?

【问题讨论】:

if 语句将布尔值设置为另一种类型。见***.com/a/62726854/12817546。 i != 0 将 int 例如设置为 bool。见***.com/a/62737936/12817546。 【参考方案1】:

因为int8 的零值是0,所以不需要else 分支。

bitSet := true
var bitSetVar int8
if bitSet 
   bitSetVar = 1

没有从bool 到整数类型的conversions。 if 语句是你能做的最好的。

【讨论】:

【参考方案2】:

在内存效率方面,按照你的做法来做

if bitSet 
   bitSetVar = 1
 else 
   bitSetVar = 0

您没有使用任何额外的变量来设置您的bitSetVar,因此我会说这是您所期望的最好的。

就运行时而言,您是:

    检查bitSet的值一次,这是你应该做的最少次数。

    设置bitSetVar的值一次,你打算这样做。

到目前为止,我会说你已经尽可能高效了。

在用户可读性方面,如果你觉得这个小sn-p代码让你的代码变得不那么美观,你可以把它转换成一个函数,也许叫它checkBitSetVar,像这样:

func checkBitSetVar(mybool bool) int8
    if mybool
        return 1
    
    return 0    //you just saved youself an else here!

主要是这样做:

setBitVar = checkBitSetVar(bitSet)

我认为这是你可以从 Go 中得到的最好的结果。

【讨论】:

好答案。我特别喜欢你使用“检查”和“设置”这两个词。 bool 类型没有“转换”。见@MuffinTop。【参考方案3】:

目前你的方法是最好的,因为它很快,用同样的方法你可以将 int8 转换为 bool,甚至更容易。您也可以保存 1 行:

var bitSetVar int8
if bitSet 
   bitSetVar = 1

Go 社区在实现此转换时遇到了问题,但似乎并非所有人都同意。

【讨论】:

【参考方案4】:

是的,这是最好的方法(快速且优化):

bitSet := true
bitSetVar := int8(0)
if bitSet 
    bitSetVar = 1

在函数中使用var bitSetVar int8bitSetVar := int8(0) 是相同的,并且您不需要else 部分,因为bitSetVarif 声明之前用零初始化。 在使用if 时可以(而且速度很快),就像这样B2i 函数:

func B2i(b bool) int8 
    if b 
        return 1
    
    return 0

但是您也可以使用map 的另一种选择(不如if 快,但在这里展示非常漂亮):

var b2i = map[bool]int8false: 0, true: 1

喜欢这个工作示例代码(带有注释输出):

package main

import "fmt"

var b2i = map[bool]int8false: 0, true: 1

var i2b = []boolfalse, true

func B2i(b bool) int8 
    if b 
        return 1
    
    return 0

func main() 
    fmt.Println(B2i(true))  // 1
    fmt.Println(B2i(false)) // 0

    fmt.Println(b2i[true])  // 1
    fmt.Println(b2i[false]) // 0

    fmt.Println(i2b[1]) // true
    fmt.Println(i2b[0]) // false

【讨论】:

以上是关于如何在golang中将bool转换为int8 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在c中将bool的输出从1和0转换为true或false [重复]

如何在 C# 中将 Cast null 键入为 Bool?

iOS:将 UnsafeMutablePointer<Int8> 快速转换为字符串?

Golang基本概念

在 SQL Server 中将 Bool 转换为 Bit

在 C++ 中将 bool 转换为文本