如何在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 int8
或bitSetVar := int8(0)
是相同的,并且您不需要else
部分,因为bitSetVar
在if
声明之前用零初始化。
在使用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 [重复]