Тип uint8

Тип uint8 представляет собой 8-битное беззнаковое целое число. Это означает, что он может хранить значения в диапазоне от 0 до 255 включительно. Тип uint8 часто используется для работы с байтами данных, так как его размер соответствует одному байту. В Go тип byte является псевдонимом для uint8, поэтому эти типы взаимозаменяемы.

Диапазон значений

Давайте проверим минимальное и максимальное значение типа uint8:

gopackage main

import (
  "fmt"
  "math"
)

func main() {
  var min uint8 = 0
  var max uint8 = math.MaxUint8
  fmt.Println("Min:", min)
  fmt.Println("Max:", max)
}

Результат выполнения кода:

go"Min: 0"
"Max: 255"

Переполнение

При попытке присвоить значение, выходящее за пределы диапазона, возникает ошибка компиляции:

gopackage main

func main() {
  var num uint8 = 256 // constant 256 overflows uint8
  _ = num
}

Результат выполнения кода:

go"constant 256 overflows uint8"

Арифметические операции

При выполнении арифметических операций с uint8 результат также будет иметь тип uint8. При переполнении происходит циклическое замыкание (wrap-around):

gopackage main

import "fmt"

func main() {
  var a uint8 = 250
  var b uint8 = 10
  res := a + b
  fmt.Println(res)
}

Результат выполнения кода:

go"4"

Преобразование типов

Тип uint8 может быть преобразован в другие числовые типы с помощью явного приведения:

gopackage main

import "fmt"

func main() {
  var num uint8 = 100
  var intNum int = int(num)
  var floatNum float64 = float64(num)
  fmt.Println(intNum)
  fmt.Println(floatNum)
}

Результат выполнения кода:

go"100"
"100"

Сравнение значений

Значения типа uint8 можно сравнивать между собой с помощью операторов сравнения:

gopackage main

import "fmt"

func main() {
  var a uint8 = 100
  var b uint8 = 200
  fmt.Println(a < b)
  fmt.Println(a == b)
}

Результат выполнения кода:

go"true"
"false"

Использование в битовых операциях

Тип uint8 часто используется для битовых операций, так как его размер точно соответствует одному байту:

gopackage main

import "fmt"

func main() {
  var a uint8 = 0b10101010
  var b uint8 = 0b11110000
  fmt.Printf("a & b: %08b\n", a & b)
  fmt.Printf("a | b: %08b\n", a | b)
  fmt.Printf("a ^ b: %08b\n", a ^ b)
}

Результат выполнения кода:

go"a & b: 10100000"
"a | b: 11111010"
"a ^ b: 01011010"

Смотрите также

  • тип byte,
    который является псевдонимом для uint8
  • тип uint16,
    который представляет 16-битное беззнаковое целое
  • тип int8,
    который представляет 8-битное знаковое целое
  • тип uint,
    который представляет беззнаковое целое с размером, зависящим от платформы