繁体   English   中英

如何在 Go 中定义位文字?

[英]How to define bit literals in Go?

有什么方法可以像在 C 和其他一些语言中一样在 Golang ( 1.12v ) 中定义像var i=0b0001111这样的位文字?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM