はじめに
func main() {
sum := 100 + 020
fmt.Println(sum)
}
これを実行すると、120ではなく、 116 が出力されます。
Goでは、0から始まる数字は8進数とみなされます。
ちなみに余談ですが、javascriptはもっと奇妙な動作をします。気になる方は
【超難問】絶対に解けないJavaScriptクイズ8選
2進数(バイナリ)
0b
、0B
の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進数
0x
、0X
のprefixをつける。(e.g. 0x3F)
ちなみにポインタは16進数です。他にもカラーコードでも16進数が使われます。
func main() {
n := 42
fmt.Printf("n: %p\n", &n)
}
複素数
iのsuffixをつけると虚数となります。(e.g. 3+4i)
複素数はcomplex128
とcomplex64
として宣言することが可能です。
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進数以外でも使用可能。