Целые типы в Go
Целые числа в Go представлены следующими типами:
int8, int16, int32, int64
и int. Разница между ними - сколько
байтов занимает ячейка в оперативной памяти и какое
самое большое число в нее помещается.
Самым основным типом для чисел является тип int32,
когда ширина должна быть одной и той же везде.
Это 4 байта, около двух миллиардов в плюс и в минус.
Количество, номер и сумма в разумных пределах туда входят.
Например, число 1500000 помещается, а число
3000000000 больше двух миллиардов -
и в int32 уже не влазит.
Тип int проблемный, так как для него
размер ячейки зависит от компьютера.
На 32-битной системе это 4 байта, около двух
миллиардов в плюс и в минус. На обычном
64-битном компьютере - 8 байт, около девяти
квинтиллионов в плюс и в минус. Один и тот же
текст на разных компьютерах вмещает в int
разные числа.
Тип int64 занимает 8 байт и на 32-битной
системе, и на 64-битной, около девяти квинтиллионов
в плюс и в минус. Для чисел, которые не помещаются
в int32, стоит пользоваться именно этим типом.
Тип int16 состоит из 2 байтов, около 32 тысяч
в плюс и в минус. Число вроде 40000
в эти 2 байта уже не поместится.
Тип int8 состоит из 1 байта, около 128
в плюс и в минус. Число вроде 200
в этот байт уже не поместится.
Запишем три числа в подходящие типы и выведем их:
var num1 int16 = 9
var num2 int32 = 1500000
var num3 int64 = 3000000000
fmt.Println(num1)
fmt.Println(num2)
fmt.Println(num3)
Сведем типы и диапазоны:
| Тип | Байты | Диапазон |
|---|---|---|
int8
|
1
|
от -128 до 127
|
int16
|
2
|
от -32768 до 32767
|
int32
|
4
|
от -2147483648 до 2147483647
|
int64
|
8
|
от -9223372036854775808 до 9223372036854775807
|
int
|
4 или 8
|
на 32 битах как int32, на 64 битах как int64
|
В каком диапазоне изменяются числа типа int16?
В каком диапазоне изменяются числа типа int32?
В каком диапазоне изменяются числа типа int64?
В каком диапазоне изменяются числа типа int?
Есть число 200. Помещается ли оно в диапазон
типа int8?
Есть число 40000. Помещается ли оно в диапазон
типа int16?
Есть число 100000. Помещается ли оно в диапазон
типа int32?
Есть число 3000000000. Помещается ли оно в диапазон
типа int32?
Есть число 100000000000. Помещается ли оно в диапазон
типа int64?
Есть число 9223372036854775808. Помещается ли оно
в диапазон типа int64?