逆引きGolang

逆引きGolang (数値)

2進数・8進数・16進数で数値を扱うには

Goには2進数リテラルはありません。8(0始まり)と16(0x始まり)はあり。

package main

import "fmt"
import "strconv"

func main() {
    i2, _ := strconv.ParseInt("10000", 2, 0)
    fmt.Println(i2)          // =>"16"
    fmt.Printf("%d\n", 020)  // =>"16"
    fmt.Printf("%d\n", 0x10) // =>"16"
}

数値を2進数・8進数・16進数表現の文字列に変換するには

package main

import "fmt"

func main() {
    s := ""
    s = fmt.Sprintf("%b", 255)
    fmt.Println(s) // => "11111111"
    s = fmt.Sprintf("%o", 255)
    fmt.Println(s) // => "11111111"
    s = fmt.Sprintf("%x", 255)
    fmt.Println(s) // => "ff"
}

任意のビット位置の値を参照する

package main

import "fmt"

func main() {
    i := 0x10
    fmt.Println(refbit(i, 0)) // => "0"
    fmt.Println(refbit(i, 4)) // => "1"
}

//任意のビット位置の値を参照する
func refbit(i int, b uint) int {
    return (i >> b) & 1
}

除算の商と余りを求める

package main

import "fmt"

func main() {
    i := 10
    d := i / 3
    m := i % 3
    fmt.Println(d, m) // => 3,1
}

絶対値を求める

package main

import "fmt"

func main() {
    import "math"
    i := -5
    fmt.Println(math.Abs(float64(i))) // => "5"

    i = 100
    fmt.Println(math.Abs(float64(i))) // =>"100"
}

小数を切り上げ・切り捨て・四捨五入するには

package main

import "fmt"
import "math"

func main() {
    f := 3.4
    fmt.Println(math.Ceil(f))  // =>"4"
    fmt.Println(math.Trunc(f)) // =>"3"
    fmt.Println(round(f))      // =>"3" Roundはないらしい
    f = 3.5
    fmt.Println(round(f)) // =>"4"
}

// 丸め
func round(f float64) float64 {
    return math.Floor(f + .5)
}

三角関数を計算する

package main

import "fmt"

func main() {
    fmt.Println(math.Sin(math.Pi / 2)) // => "1"
    fmt.Println(math.Cos(0))           // => "1"
    fmt.Println(math.Tan(0))           // => "0"
}

対数を計算する

package main

import "fmt"

func main() {
    fmt.Println(math.Log(math.E)) // => "1"
    fmt.Println(math.Log10(10))   // => "1"
}

平方根を求める

package main

import "fmt"

func main() {
    fmt.Println(math.Sqrt(100)) // => "10"
    fmt.Println(math.Sqrt(10))  // => "3.1622776601683795"
}

擬似乱数を生成する

Seedの与え方はこちら

Intn(100)は[0,100)の乱数を返します。

package main

import "fmt"
import "time"
import "math/rand"

func main() {

    rand.Seed(time.Now().UnixNano()) //Seed

    fmt.Println(rand.Float32())
    fmt.Println(rand.Intn(100))
}

整数と浮動小数を相互変換する(精度の変換)

package main

import "fmt"

func main() {
    i := 1
    f := float64(i)
    fmt.Printf("%d, %f\n", i, f)

    f = 3.0
    i = int(f)
    fmt.Printf("%d, %f\n", i, f)
}