方法

2016-07-28 6 views
5
bitSet := true 
var bitSetVar int8 

がどのように私はこれを行うことができます1方法

としてbitSetVarからbitSetを割り当てることができますブールはgolangでINT8へ変換するのですか?

答えて

6

int8のゼロ値は0なので、elseブランチは必要ありません。

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

整数型へboolからのconversionsはありません。 ifステートメントはあなたができる最高です。メモリ効率の点で

0

は、

if bitSet { 
    bitSetVar = 1 
} else { 
    bitSetVar = 0 
} 

を行うためのあなたのアプローチで行く、あなたはので、私はこれがあなたが期待できる最善であると言うでしょう、あなたのbitSetVarを設定するために余分な変数を使用していません。実行時の観点で

は、あなたは以下のとおりです。

  1. はあなたがやるべき回数の最小数です一度BITSET の値を、確認します。

  2. の値を1回に設定します。今ティル

、私はあなたができるもので、効率的だったと言うでしょう。

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

:あなたは、コードのこの小さなスニペットは、任意の少ない提示可能なコードを作っている、あなたはこのように、多分checkBitSetVarを呼び出し、関数にそれをシフトすることができると感じた場合、ユーザーの読みやすさの面では

、メインでは次のようにしてください:

setBitVar = checkBitSetVar(bitSet) 

私はこれがGoから抜け出すことができると思います。

1

あなたの方法は現在、最高です。速く、int8をboolに変換するのと同じ方法で、さらに簡単です。

var bitSetVar int8 
if bitSet { 
    bitSetVar = 1 
} 

Goコミュニティにはこの変換を実装する際に問題がありましたが、すべての人が同意しているとは限りません。

2

はい、これは、(迅速かつ最適化された)最善の方法である:bitSetVarは前にゼロで初期化するので、関数内var bitSetVar int8またはbitSetVar := int8(0)を使用して

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

は同じであり、そしてあなたはelse一部を必要としませんそのifの表記です。ifを使用すると、このB2i機能のようにOK(および速い)である
ながら:

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

しかし、あなたはあまりにもmapを使用して別のオプションを持っている(ないほど速くifが、素敵で美しいとして、ここで表示する):

package main 

import "fmt" 

var b2i = map[bool]int8{false: 0, true: 1} 

var i2b = []bool{false, 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 
} 
:(コメント出力を有する)、この作業サンプルコード等
var b2i = map[bool]int8{false: 0, true: 1}