Цілі числа у Go

Цілі числа у 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