Как определить битовые литералы в Go? - PullRequest
0 голосов
/ 15 июня 2019

Есть ли способ определить битовые литералы, такие как var i=0b0001111 в Golang ( 1.12v ), как в C и некоторых других языках?

1 Ответ

4 голосов
/ 15 июня 2019

Спецификация языка программирования Go
Версия от 14 мая 2019 г.

Целочисленные литералы

Целочисленный литерал - это последовательность цифр, представляющих целочисленную константу.Необязательный префикс устанавливает недесятичное основание: 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...