如何在Go中定义位文字?

时间:2019-06-14 22:29:46

标签: go

是否可以像在C语言和某些其他语言中一样在Golang( 1.12v )中定义位文字,例如var i=0b0001111

1 个答案:

答案 0 :(得分:4)

  

Go编程语言规范
   2019年5月14日版本

     

整数文字

     

整数文字是代表整数的数字序列   不变。可选的前缀设置了一个非十进制的基数:0b或0B用于   二进制,八进制为0、0o或0O,十六进制为0x或0X。一个   0被视为十进制零。在十六进制文字中,字母a   到f和A到F代表值10到15。

     

为便于阅读,在底数后可能会出现下划线字符_   前缀或连续数字之间;这样的下划线不会改变   文字的值。

int_lit        = decimal_lit | binary_lit | octal_lit | hex_lit .
decimal_lit    = "0" | ( "1" … "9" ) [ [ "_" ] decimal_digits ] .
binary_lit     = "0" ( "b" | "B" ) [ "_" ] binary_digits .
octal_lit      = "0" [ "o" | "O" ] [ "_" ] octal_digits .
hex_lit        = "0" ( "x" | "X" ) [ "_" ] hex_digits .

decimal_digits = decimal_digit { [ "_" ] decimal_digit } .
binary_digits  = binary_digit { [ "_" ] binary_digit } .
octal_digits   = octal_digit { [ "_" ] octal_digit } .
hex_digits     = hex_digit { [ "_" ] hex_digit } .

对于Go 1.13和更高版本,请使用二进制或十六进制:

package main

import "fmt"

func main() {
    b := byte(0b00010011)
    fmt.Printf("%08b %02x\n", b, b)
    x := byte(0x13)
    fmt.Printf("%08b %02x\n", x, x)
}

输出:

00010011 13
00010011 13

对于Go 1.12和更早版本,请使用十六进制:

package main

import "fmt"

func main() {
    x := byte(0x13)
    fmt.Printf("%08b %02x\n", x, x)
}

输出:

00010011 13