Есть ли способ конвертировать целые числа в bools в go или наоборот? - PullRequest
21 голосов
/ 06 декабря 2011

Есть ли встроенный способ приведения булев к целым числам или наоборот? Я пробовал обычное приведение, но так как они используют разные базовые типы, преобразование невозможно классическим способом. Я рассмотрел некоторые спецификации и пока не нашел ответа.

Ответы [ 5 ]

32 голосов
/ 06 декабря 2011

Int для bool легко, просто x != 0 сделает свое дело. Чтобы пойти другим путем, так как Go не поддерживает троичный оператор, вам нужно сделать:

var x int
if b {
    x = 1
} else {
    x = 0
}

Вы, конечно, можете поместить это в функцию:

func Btoi(b bool) int {
    if b {
        return 1
    }
    return 0
 }

Существует так много возможных булевых интерпретаций целых чисел, ни одно из которых не обязательно является естественным, поэтому имеет смысл сказать, что вы имеете в виду.

По моему опыту (YMMV), вам не нужно делать это часто, если вы пишете хороший код. Иногда приятно написать математическое выражение, основанное на логическом значении, но ваши сопровождающие будут благодарны вам за то, что вы его избежали.

6 голосов
/ 28 апреля 2017

Вот трюк для преобразования из int в bool:

x := 0
newBool := !(x == 0) // returns false

, где x - это переменная int, из которой вы хотите конвертировать.

5 голосов
/ 06 декабря 2011
var a int = 3
var b bool = a != 0

Я только что уронил это в демонстрационную коробку на главной странице golang :

package main

import "fmt"

func main() {
 var a int = 3
 var b bool = a != 0
    fmt.Println("Hello, 世界", b)
}

Вывод:

Hello, 世界 true
2 голосов
/ 29 июня 2018

Просто чтобы показать 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
}

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

2 голосов
/ 28 июня 2018

Нет преобразований из bool в целочисленные типы или наоборот.

Используйте оператор неравенства для преобразования целых чисел в bool значения:

b := i != 0

Используйте оператор if для преобразования bool в целочисленный тип:

var i int
if b {
    i = 1
}

Поскольку нулевое значение для целочисленных типов равно 0, ветвь else, показанная в других ответах, не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...