Ціле число (тип даних)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Ціле число (англ. Integer) — поширений тип даних, що представляє ціле число.

Тип даних «ціле число» використовується в більшості мов програмування. Як правило, мови програмування підтримують різні типи цілих чисел, з різною кількістю двійкових розрядів і діапазоном значень. Наприклад, у мові Паскаль (версія Free Pascal для інтелівських процесорів) це:

  • Byte (0 .. 255)
  • Shortint (-128 .. 127)
  • Smallint (-32768 .. 32767)
  • Word (0 .. 65535)
  • Longint (-2147483648 .. 2147483647)
  • Longword (0 .. 4294967295)
  • Int64 (-9223372036854775808 .. 9223372036854775807)
  • QWord (0 .. 18446744073709551615)

Як правило, діапазон значень визначається кількістю байтів, що відведена під конкретний цілий тип в пам'яті комп'ютера.

Подання[ред.ред. код]

У пам'яті типової комп'ютерної системи ціле число представлено у вигляді ланцюжка бітів фіксованого (кратного 8) розміру. Ця послідовність нулів і одиниць - не що інше, як двійковий запис числа, оскільки зазвичай для подання чисел у сучасній комп'ютерній техніці використовується позиційний двійковий код. Діапазон цілих чисел, як правило, визначається кількістю байтів в пам'яті комп'ютера, що відводяться під одну змінну.

Багато мов програмування пропонують вибір між короткими (англ. short), довгими (англ. long) і цілими стандартної довжини. Довжина стандартного цілого типу, як правило, збігається з розміром машинного слова на цільовій платформі. Для 16-розрядних операційних систем - цей тип (int) складає 2 байта і збігається з типом short int (можна використовувати як short, опускаючи слово int), для 32-розрядних операційних систем він буде дорівнює 4 байтам і збігається з довгим цілим long int (можна використовувати як long, опускаючи слово int), і в цьому випадку буде становити 4 байта. Коротке ціле short int, для 16-розрядних операційних систем, 32-розрядних операційних систем, і для більшості 64-розрядних операційних систем складає - 2 байти. Також в деяких мовах може використовуватися тип даних подвійне довге long long, який складає 8 байт.

Для 64-розрядних операційних систем враховуючи різницю моделей даних (LP64, LLP64, ILP64), уявлення цілого типу на різних моделях даних може відрізнятися між собою. Тип int і long може складати як 4, так і 8 байт.

Варто відзначити, що кожна мова програмування реалізує свою сигнатуру представлення цілих чисел, яка може відрізняться від міжнародних стандартів, але зобов'язана його / їх підтримувати. Наприклад можна віднести крос-платформену бібліотеку Qt, де ціле представляється типом qintX і quintX, де X-8, 16,32,64.

Цілі типи поділяються на беззнакові (англ. unsigned) і знакові (англ. signed).

Беззнакові цілі[ред.ред. код]

Беззнакові цілі представляють тільки невід'ємні числа, при цьому всі розряди коду використовуються для подання значення числа і максимальне число відповідає одиничним значенням коду у всіх розрядах: 111 ... 111. m-байтовая мінлива цілого типу без знака, очевидно, приймає значення від 0 до +28 m-1.

У C і C + + для позначення беззнакових типів використовується префікс unsigned. У C # в якості показника беззнакового використовується префікс u (англ. unsigned). Наприклад, для оголошення беззнакового цілого, рівного за розміром одному машинному слову використовується тип uint.

Беззнакові цілі, зокрема, використовуються для адресації пам'яті, представлення символів.

Іноді в літературі зустрічаються рекомендації не використовувати тип беззнакові цілі, оскільки він може бути не реалізований процесором комп'ютера, однак навряд чи ця рада слід вважати актуальним - більшість сучасних процесорів (у тому числі x86-сумісні) однаково добре працюють як зі знаковими, так і з беззнаковими цілими.

У деяких мовах, наприклад java, беззнакові цілі типи (за винятком символьного) відсутні.

Неправильне використання беззнакових цілих може призводити до неочевидним помилок через що виникає переповнення [4]. У наведеному нижче прикладі використання беззнакових цілих в циклі в C і C + + перетворює цей цикл в нескінченний:

char ar[N];
for (unsigned int i = N-1; i >= 0; --i)
      ar[i] = i;

Цілі зі знаком[ред.ред. код]

Існує кілька різних способів представлення цілих значень в двійковому коді у виді величини зі знаком. Зокрема можна назвати прямий і зворотний коди. Знак кодується в старшому розряді числа: 0 відповідає позитивним, а 1 негативним числам.

Можуть бути використані і більш екзотичні представлення негативних чисел, такі, як, наприклад, система числення за основою -2.

Однак для більшості сучасних процесорів звичайною виставою чисел зі знаком є ​​додатковий код. Максимальне позитивне число представляється двійковим кодом 0111 ... 111, максимальне по модулю негативне кодом 1000 ... 000, а код 111 ... 111 відповідає -1. Таке уявлення чисел відповідає найбільш простий реалізації арифметичних логічних пристроїв процесора на логічних вентилях і дозволяє використовувати один і той же алгоритм додавання і віднімання як для беззнакових чисел, так і для чисел зі знаком (відмінність - тільки в умовах, при яких вважається, що настав арифметичне переповнення).

m-байтовая мінлива цілого типу зі знаком приймає значення від-28m-1 до +28 m-1-1.

Операції над цілими[ред.ред. код]

Арифметичні операції[ред.ред. код]

До цілочисловим значенням застосовні в першу чергу арифметичні операції. Нижче наведені часто використовувані (у дужках вказані їх позначення в різних мовах програмування і їм аналогічним засобах).

  • Порівняння (англ. comparision). Тут застосовні співвідношення «дорівнює» («=»; «==»; «eq»), «не дорівнює» («! =»; «<>»; «Ne»), «більше» («>»; « gt »),« більше або дорівнює »(«> = »;« ge »),« менше »(« <»;« lt ») і« менше або дорівнює »(« <= »;« le »).
  • Інкремент (англ. increment; «+ +») і декремент (англ. decrement; «-») - арифметичне збільшення або зменшення числа на одиницю. Виділено в окремі операції через часте використання з змінними-лічильниками в програмуванні.
  • Додавання (англ. addition; «+») і віднімання (англ. substraction; «-»).
  • Множення (англ. multiplication; "*").
  • Ділення (англ. division; «/»; «\») і отримання залишку від ділення (англ. modulo; «%»). Деякі процесори (наприклад, архітектури x86) дозволяють виробляти обидві ці операції за одну інструкцію.
  • Інверсія знака (англ. negation) і отримання абсолютного значення (англ. absolute).
  • Отримання знака. Результатом такої операції зазвичай є 1 для позитивних значень, -1 - для негативних і 0 - для нуля.
  • Піднесення до степеня («^»).

У деяких мовах програмування для лаконічності є оператори, які дозволяють виробляти арифметичну операцію з присвоєнням. Наприклад, «+ =» складає поточне значення змінної ліворуч з виразом праворуч і поміщає результат у вихідну змінну. Так само в деяких мовах і середовищах доступна поєднана операція MulDiv, яка примножує на одне число, а потім ділить результат на друге.

Зазвичай найдорожчими за швидкістю операціями є множення і ділення (одержання залишку від ділення).

У пам'яті комп'ютера для зберігання цілих чисел зазвичай відводиться осередки фіксованого обсягу. Через це операції збільшення та зменшення значень можуть призводити до переповнення, що обертається спотворенням результату. Деякі мови програмування дозволяють виробляє виклик виключення в таких випадках. Крім цього можна визначати поведінку при переповненні:

  • Циклічна операція (зазвичай відбувається за замовчуванням). Наприклад, якщо зробити інкремент 8-бітного беззнакового значення 255, то вийде 0.
  • Операція з насиченням. Якщо буде досягнута межа, то кінцевим значенням буде це граничне. Наприклад, якщо до 8-бітному беззнаковим числу 250 додати 10, то вийде 255. Додавання, віднімання та множення з насиченням зазвичай застосовується при роботі з кольором.

Побітові операції[ред.ред. код]

Крім математичних, до цілих числах застосовні бітові операції, які засновані на особливостях позиційного двійкового кодування. Зазвичай вони виконуються значно швидше, ніж арифметичні операції і тому їх використовують як більш оптимальні аналоги.

  • Бітове зрушення вліво з доповненням нулями аналогічний множенню числа на ступінь двійки (кількість біт зрушення відповідає ступеню двійки).
  • Бітовий зрушення вправо аналогічний поділу на ступінь двійки (кількість біт зрушення відповідає ступеню двійки). Деякі мови програмування і процесори підтримують арифметичний зсув, який дозволяє зберігати знак у цілих зі знаком (зберігається значення старшого біта).
  • У цілих зі знаком знак можна дізнатися за допомогою старшого біту (у негативних він встановлений).
  • Читання і установка молодшого біта дозволяє управляти парністю (у непарних чисел він встановлений).
  • Побітове «І» над певною кількістю молодших біт дозволяє дізнатися залишок від ділення на ступінь двійки (ступінь відповідає кількості біт).
  • Побітове «АБО» над певною кількістю молодших біт і подальший інкремент округлює число на значення, рівне ступеню двійки (ступінь відповідає кількості біт) - використовується для вирівнювання адрес і розмірів на певне значення.

Робота з рядками[ред.ред. код]

Досить частими операціями є отримання рядки з числового значення у внутрішньому поданні і навпаки - число з рядка. При перетворенні в рядок зазвичай доступні засоби завдання форматування залежно від мови користувача.

Нижче перераховані деякі з уявлень чисел рядком.

  • Десяткове число (англ. decimal). При отриманні рядка зазвичай можна задати роздільники розрядів, кількість знаків (додаються лідируючі нулі якщо їх менше) і обов'язкове значення знака числа.
  • Число у системі числення, яке є степенем двійки. Найчастіші: двійкове (binary англ. Binary), вісімкове (англ. octal) і шістнадцяткова система (англ. hexadecimal). При отриманні рядків зазвичай можна задати роздільники груп цифр і мінімальна кількість цифр (проводиться доповнення нулями, якщо їх менше). Так як ці подання найчастіше використовуються в програмуванні, то тут зазвичай доступні відповідні функції. Наприклад, вказівка ​​префікса і постфікса для отримання значення відповідно до синтаксисом мови. Для 16-кової актуально вказівку регістру символів, а також обов'язкове додавання нуля, якщо перша цифра представлена ​​буквою (щоб число не визначалася як строковий ідентифікатор).
  • Римське число (англ. roman).
  • Словесний представлення (у тому числі сума прописом) - число представлене словами на зазначеній натуральній мові.

Перелічувальний тип[ред.ред. код]

До цілих відноситься також перелічувальний тип. Змінні перелічувального типу приймають кінцевий заздалегідь заданий набір значень. Розмір набору не визначається числом байтів, використовуваних для представлення цілочисельних значень змінних такого типу.

Наприклад, у мові Python логічний тип є підтипом цілого і використовує назви False і True, які при переведенні до цілого отримують значення 0 і 1 відповідно.