有没有办法将整数转换为bools,反之亦然?

wor*_*orr 24 types go

是否存在将bool转换为整数的内置方法,反之亦然?我尝试过普通的转换,但由于它们使用不同的底层类型,转换是不可能的经典方式.我已经倾注了一些规范,但我还没有找到答案.

Ste*_*ark 31

Int to bool很容易,只是x != 0会做的伎俩.换句话说,由于Go不支持三元运算符,您必须这样做:

var x int
if b {
    x = 1
} else {
    x = 0
}
Run Code Online (Sandbox Code Playgroud)

你当然可以将它放在一个函数中:

func Btoi(b bool) int {
    if b {
        return 1
    }
    return 0
 }
Run Code Online (Sandbox Code Playgroud)

整数有很多可能的布尔解释,它们都不一定是自然的,所以必须说出你的意思是有道理的.

根据我的经验(YMMV),如果您编写好的代码,则不必经常这样做.有时候能够根据布尔值编写数学表达式很有吸引力,但是你的维护者会感谢你避免使用它.

  • 是的,但它弄乱了我的代码高尔夫球 (6认同)
  • 请注意,第一个示例中的“else”是不必要的,因为“x”将被初始化为“0”,如 Cerise Limón 的答案所示。 (3认同)

Cer*_*món 8

没有从整数类型到整数类型的转换bool反之亦然。

使用不等式运算符将整数转换为bool值:

b := i != 0
Run Code Online (Sandbox Code Playgroud)

使用 if 语句将 a 转换bool为整数类型:

var i int
if b {
    i = 1
}
Run Code Online (Sandbox Code Playgroud)

因为整数类型的零值为 0,所以其他答案中显示的 else 分支不是必需的。


Sam*_*raf 7

这里有一个窍门,从转换intbool

x := 0
newBool := !(x == 0) // returns false
Run Code Online (Sandbox Code Playgroud)

您要从中转换xint变量在哪里。

  • newBool​​ := x != 0 (2认同)

Vor*_*ung 7

只是为了显示 TMTOWTDT

package main

import (
    "fmt"
    "unsafe"
)

func main() {
    fmt.Println(bool2int(true))
    fmt.Println(bool2int(false))
}

func bool2int(a bool) uint64 {
    return *(*uint64)(unsafe.Pointer(&a))&1
}
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/eULE6cJO_c0

  • 如果我在公司代码中看到这一点,我会“责备”它,然后将其报告给人力资源部。 (2认同)

Mat*_*ner 6

var a int = 3
var b bool = a != 0
Run Code Online (Sandbox Code Playgroud)

我把它放到了golang首页演示框中:

package main

import "fmt"

func main() {
 var a int = 3
 var b bool = a != 0
    fmt.Println("Hello, ??", b)
}
Run Code Online (Sandbox Code Playgroud)

输出:

Hello, ?? true
Run Code Online (Sandbox Code Playgroud)