Тип uint8
Тип uint8 представляет собой 8-битное беззнаковое целое число.
Это означает, что он может хранить значения в диапазоне от 0 до 255 включительно.
Тип uint8 часто используется для работы с байтами данных, так как его размер
соответствует одному байту. В Go тип byte является псевдонимом для uint8,
поэтому эти типы взаимозаменяемы.
Диапазон значений
Давайте проверим минимальное и максимальное значение типа uint8:
package main
import (
"fmt"
"math"
)
func main() {
var min uint8 = 0
var max uint8 = math.MaxUint8
fmt.Println("Min:", min)
fmt.Println("Max:", max)
}
Результат выполнения кода:
"Min: 0"
"Max: 255"
Переполнение
При попытке присвоить значение, выходящее за пределы диапазона, возникает ошибка компиляции:
package main
func main() {
var num uint8 = 256 // constant 256 overflows uint8
_ = num
}
Результат выполнения кода:
"constant 256 overflows uint8"
Арифметические операции
При выполнении арифметических операций с uint8 результат также
будет иметь тип uint8. При переполнении происходит циклическое
замыкание (wrap-around):
package main
import "fmt"
func main() {
var a uint8 = 250
var b uint8 = 10
res := a + b
fmt.Println(res)
}
Результат выполнения кода:
"4"
Преобразование типов
Тип uint8 может быть преобразован в другие числовые типы
с помощью явного приведения:
package 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)
}
Результат выполнения кода:
"100"
"100"
Сравнение значений
Значения типа uint8 можно сравнивать между собой
с помощью операторов сравнения:
package main
import "fmt"
func main() {
var a uint8 = 100
var b uint8 = 200
fmt.Println(a < b)
fmt.Println(a == b)
}
Результат выполнения кода:
"true"
"false"
Использование в битовых операциях
Тип uint8 часто используется для битовых операций,
так как его размер точно соответствует одному байту:
package 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)
}
Результат выполнения кода:
"a & b: 10100000"
"a | b: 11111010"
"a ^ b: 01011010"