НОУ ИНТУИТ, Лекція, Робота з числами в мові Java
Ця частина присвячена вивченню роботи з числами більш глибокому рівні. У ній розглядається машинне уявлення цілих і речових чисел, ефективне для апаратної реалізації, а також пояснюються особливості та проблеми, до яких наводить таке уявлення.
4.1. Двійкове уявлення цілих чисел
Позиційні та непозиційні системи числення
Позиційна система числення - це такий спосіб запису числа, при якому вага цифри залежить від позиції і пропорційний ступеня деякого числа. Підстава ступеня називається основою системи числення.
Наприклад, число 2006 у десятковій системі числення подається у вигляді суми тисяч, сотень, десятків та одиниць:
тобто доданків з різними ступенями числа 10. На підставі ступеня - числу десять - система називається десятковою. Інші позиційні системи числення відрізняються лише числом на підставі ступеня.
При написанні програм найчастіше використовують десяткову, шістнадцяткову (підставу шістнадцять), вісімкову (підставу вісім) та двійкову (підставу дві) системи. Число різних знаків - цифр, що використовуються для запису чисел - у кожній системі дорівнює підставі даної системи числення.
У шістнадцятковій системі " звичайних " десяткових цифр недостатньо, й у позначення цифр, більших дев'яти, використовуються великі латинські літери A,B,C,D,E,F.
Надалі скрізь, де це необхідно, ми будемо вказувати основу системи числення індексом поруч із числом: - у десятковій системі, - у шістнадцятковій системі, - у вісімковій системі, - у двійковій системі.
Існує безліч непозиційних систем числення, в яких числа зображуються та називаються за своїми правилами. Для римськоїсистеми чисел характерні зіставлення окремого знака кожному великому числу (V - п'ять, X - десять, L - п'ятдесят, C - сто, M - тисяча), повторення знака стільки разів, скільки таких чисел у всьому числі (III - три, XX - двадцять) ), окремі правила для попередніх і наступних чисел (IV – чотири, VI – шість, IX – дев'ять). Безліч непозиційних систем числення пов'язане з традиційними способами вимірювання конкретних величин - часу (секунда, хвилина, година, доба, тиждень, місяць, рік), довжини (дюйм, фут, ярд, миля, аршин, сажень), маси (унція, фунт) , Грошові одиниці. Виконання арифметичних дій у таких системах є вкрай складним завданням.
Наведемо приклад найпростіший із можливих систем числення – унарну. У ній є лише одна цифра 1. В унарній системі числення число 1 зображується як 1, число 2 зображується як 11, число 3 як 111, число 4 як 1111, і так далі. Спочатку замість одиниці використовувалися палички (пам'ятаєте дитячий садок?), тому така система числення іноді називається паличковою. Як не дивно, вона є позиційною.
Позиційні системи числення з основою 2 і зручніші для алгоритмізації математичних операцій з числами (згадайте спосіб складання та множення "стовпчиком"). Двійкова система є природним способом кодування інформації в комп'ютері, коли повідомлення представляється набором нулів ("0" - немає сигналу лінії) і одиниць ("1" - є сигнал лінії). Для позначення двійкових цифр застосовується термін "біт", що є скороченням англійського словосполучення "двійкова цифра" (BInary digiT).
Архітектура комп'ютера накладає істотне обмеження на довжину інформації, що обробляється за операцію. Ця довжина вимірюється кількістю двійкових розрядів і називаєтьсярозрядністю. За допомогою восьми двійкових розрядів можна уявити цілих чисел. Порція інформації розміром 8 біт (8-бітове число) служить основною одиницею вимірювання комп'ютерної інформації і називається байтом (byte). Як правило, передача інформації всередині комп'ютера та між комп'ютерами йде порціями, кратними цілій кількості байт.
Машинним словом називають порцію даних, яку процесор комп'ютера може обробити за операцію ( мікрокоманду ). Перші персональні комп'ютери були 16-розрядними, тобто. працювали з 16-бітними (двобайтними) словами. Тому операційні системи цих комп'ютерів також були 16-разрядными. Наприклад, MS DOS. Операційні системи для персональних комп'ютерів наступних поколінь були 32-розрядними (Windows® '95/'98/NT/ME/2000/XP, Linux, MacOS®), оскільки призначалися для використання з 32-розрядними процесорами. Сучасні операційні системи або 32-розрядні, або навіть 64-розрядні (версії для 64-розрядних процесорів).
Подання чисел у двійковій та шістнадцятковій системах числення, а також перетворення з однієї системи в іншу часто необхідне при програмуванні апаратури для вимірювань, контролю та управління за допомогою портів введення-виводу, цифро-аналогових та аналого-цифрових перетворювачів.
Двійкове уявлення позитивних цілих чисел
Цілі числа в комп'ютері зазвичай кодуються в двійковому коді, тобто в двійковій системі числення. Наприклад, число 5 можна подати у вигляді .
Показник системи числення прийнято записувати праворуч знизу біля числа.
Аналогічно, , і таке інше. Все дуже схоже на позначення чисел у десятковій системі числення:
. Але тільки як основа системи числення використовується число. Числа, записані в десятковій системі, індекс 10 зазвичай не пишеться, але його можна писати. Так що , і таке інше.
У двійковій арифметиці лише дві цифри, 0 і 1. Двійковий код позитивного цілого числа – це коефіцієнти розкладання числа за ступенями двійки.
Множення числа на двійкове десять, тобто на , призводить до дописування справа нуля в подвійному поданні числа. Множення на двійкове сто, тобто на - дописування двох нулів. І так далі.
Цілочисельне поділ на відкиданням залишку проводиться шляхом відкидання останнього (молодшого) біта, поділ на - відкидання двох останніх біт, і так далі. Зазвичай такі операції називають побітовими зрушеннями на n біт вліво (множення на ) або вправо (цілочисленне поділ на).
Додавання двійкових чисел можна робити "в стовпчик" за повною аналогією зі складанням десяткових чисел. Єдина відмінність – те, що у двійковій арифметиці лише дві цифри, 0 та 1, а не десять цифр (від 0 до 9) як у десятковій. Тому якщо в десятковій арифметиці одиницю старшого розряду дає, наприклад, додавання 1 і 9, то в двійковій арифметиці її дасть додавання 1 і 1. Тобто
(У десятковій системі ця рівність виглядає як 1+1=2). Аналогічно, , і таке інше.
Приклади додавання "в стовпчик":
Абсолютно аналогічно виконується множення:
У машинній реалізації цілісного множення використовують побітові зрушення вліво та додавання. Оскільки ці алгоритми дуже прості, вони реалізуються апаратно.