0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

func main() {
	sum := 100 + 020
	fmt.Println(sum)
}

これを実行すると、120ではなく、 116 が出力されます。
Goでは、0から始まる数字は8進数とみなされます。

ちなみに余談ですが、javascriptはもっと奇妙な動作をします。気になる方は
【超難問】絶対に解けないJavaScriptクイズ8選

2進数(バイナリ)

0b0Bのprefixつける。(e.g. 0b1010)

以下はビット演算の例。

func main() {
    var a uint8 = 0b1010
    var b uint8 = 0b0110

    fmt.Printf("a AND b = %08b\n", a & b)
    fmt.Printf("a OR b = %08b\n", a | b)
    fmt.Printf("a XOR b = %08b\n", a ^ b)
    fmt.Printf("a << 1 = %08b\n", a << 1)
    fmt.Printf("a >> 1 = %08b\n", a >> 1)
}

8進数

0, 0oのprefixをつける。(e.g. 012)

ファイルにパーミッションを付与する際によく用いられる。(os)

func main() {
    file, err := os.OpenFile("example.txt", os.O_CREATE|os.O_WRONLY, 0666)
    if err != nil {
        panic(err)
    }
    defer file.Close()
    file.WriteString("Hello, World!")
}

16進数

0x0Xのprefixをつける。(e.g. 0x3F)

ちなみにポインタは16進数です。他にもカラーコードでも16進数が使われます。

func main() {
	n := 42
	fmt.Printf("n: %p\n", &n)
}

複素数

iのsuffixをつけると虚数となります。(e.g. 3+4i)
複素数はcomplex128complex64として宣言することが可能です。

func main() {
	var z1 complex128 = 1 + 2i
	z2 := 3 + 4i

	fmt.Printf("Sum: %v\n", z1+z2) // Sum: (4+6i)
	fmt.Printf("Mutli: %v\n", z1*z2) // Mutli: (-5+10i)
	fmt.Printf("Abs: %v\n", cmplx.Abs(z1)) // Abs: 2.23606797749979
}

アンダースコア

数字を読みやすくするために、区切り文字として_を使える。
例えば、1億は100_000_000とかける。また、10進数以外でも使用可能。

スライド

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?