Цілі числа у Go #
Як ми раніше дізнались, у Go існують базові числові типи, яки дозволяють покрити більшість потреб у базових математичних обчисленнях.
У комп’ютерах використовується двійкова система. Кожен біт - цифра 0 або 1. Вони мають собою послідовність, де кожен наступний біт, починаючи з правої сторони означає число, у 2 рази більше попереднього. 1, 2, 4, 8, 16, 32 …
Наприклад, число 15 у 8 бітах буде виглядати як 00001111
. тобто 1 + 2 + 4 + 8.
Та є максимальне обмеження кількості бітів на одне число. Їх не може бути більше ніж підтримує поточна система. Тобто для сучасних систем це 32 або 64.
Цілі числа - це числа які мають в собі тільки цілу частину. Без дробу, десяткових цифр. Максимальний розмір числа вираховується із кількості біт, задіяних для числа. У комп’ютері для зберігання цілого числа використовуються біти.
Знакове та беззнакове число - знаком у математиці являється знак “-
” (мінус) що означатиме що число є від’ємним.
Як зберігається знакове число? #
Для знаку використовується 1 старший біт а рахунок, як і у випадку з позитивними числами, починається з самого меншого. Найменше число залежить від розрядності - для 8 бітів це -128. Тобто -1 у 8 бітах буде виглядати як 11111111
, а -15 ось так: 11110001
. У зв’язку з цим максимальне знакове число яке може зберігатись для 8 бітного цілого числа буде складатись з 7 бітів значення та одного біту знаку. Тобто від -128 до 127. Для беззнакового цей діапазон буде трішки іншим, бо біт, який у знаковому числі було використано під знак тут ми можемо використати для значення. Тоді в нас вийде від 0 до 255 для 8-бітного беззнакового числа.
Ось всі цілі типи з їх розмірами:
int8
: представляє ціле число від -128 до 127 і займає в пам’яті 1 байт (8 біт)int16
: представляє ціле число від -32768 до 32767 і займає в пам’яті 2 байти (16 біт)int32
: представляє ціле число від -2147483648 до 2147483647 і займає 4 байти (32 біти)int64
: представляє ціле число від -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 і займає 8 байт (64 біти)uint8
: представляє ціле число від 0 до 255 і займає 1 байтuint16
: представляє ціле число від 0 до 65535 і займає 2 байтиuint32
: представляє ціле число від 0 до 4294967295 і займає 4 байтиuint64
: представляє ціле число від 0 до 18 446 744 073 709 551 615 і займає 8 байтbyte
: синонім типу uint8, представляє ціле число від 0 до 255 і займає 1 байтrune
: синонім типу int32, представляє ціле число від -2147483648 до 2147483647 і займає 4 байтиint
: представляє ціле число зі знаком, яке залежно від платформи може займати або 4 байти, або 8 байт. Тобто відповідати абоint32
, абоint64
.uint
: представляє ціле беззнакове число тільки без знака, яке, аналогічно типу int, залежно від платформи може займати або 4 байти, або 8 байт. Тобто відповідати абоuint32
, абоuint64
.
Тут нескладно запам’ятати, що є типи зі знаком (тобто які можуть бути від’ємними) і є беззнакові (позитивні типи), які починаються на префікс u
(uint32
). Ну і також є byte
- синонім для uint8
і rune
- синонім для int32
.
int
та uint
- це найбільш використовуваний тип для представлення цілих чисел у програмі. Вони мають той самий розмір як і сама платформа (32 або 64 біти), але різні компілятори можуть надавати різний розмір для цих типів навіть для однієї і тієї ж платформи.
Приклади оголошення змінних, які представляють цілочисельні типи:
var a int8 = -1
var b uint8 = 2
var c byte = 3 // byte - синонім типу uint8
var d int16 = -4
var f uint16 = 5
var g int32 = -6
var h rune = -7 // rune - синонім типу int32
var j uint32 = 8
var k int64 = -9
var l uint64 = 10
var m int = 102
var n uint = 105