Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Бичков - Основи сучасного програмування.doc
Скачиваний:
69
Добавлен:
07.03.2016
Размер:
2.67 Mб
Скачать

5.5. Ознака переповнення розрядної сітки при арифметичних операціях

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

При алгебраїчному додаванні двох двійкових чисел з використанням додаткового (зворотного) коду для їхнього зображення ознакою переповнення розрядної сітки є перенесення в знаковий розряд суми за відсутності перенесення з нього (додатне переповнення). Ознакою від'ємного переповнення є перенесення зі знакового розряду суми за відсутності перенесення в нього.

Якщо й у знаковий, і зі знакового розряду суми є чи немає перенесення, то переповнення відсутнє. При додатному переповненні результат операції додатний, при від'ємному – від'ємний. Розглянемо додатне та від'ємне переповнення:

а) б)

0 101 1 011

0 101 1 011

1 010 10110.

Приклад а) демонструє додатне переповнення, б) – від'ємне.

5.6. Зображення цілих чисел

Пригадаємо, що в мові C існує базовий тип int для зображення цілих чисел зі знаком. Також для цього можна використати модифікатори short та long і отримати типи short int чи просто short та long int, скорочено – long, а також unsigned для зображення беззнакових цілих (утворюються типи unsigned int, unsigned short int та unsigned long int). Для роботи з цілими числами, для зображення яких достатньо одного байта, можна використовувати й типи char чи unsigned char.

У пам'яті комп'ютера дані зберігаються в послідовно розташованих байтах. Для даних різних типів використовується різна кількість байтів (табл. 5.3).

Таблиця 5.3

Повна назва типу

Скорочена назва типу

Обсяг у байтах

Діапазон значень

Signed char

Char

1

Від –128 до 127

Signed int

Signed,int

~

Signed short in

Short, Signed short

2

від –32 768 до 32 767

Signed long int

Long, Signed long

4

від –2 147 483 648 до 2 147 483 647

Unsigned char

Unsigned char

1

Від 0 до 255

Unsigned short int

Unsigned short

2

Від 0 до 65 535

Unsigned long int

Unsigned long

4

Від 0 до 65 535

Unsigned int

Unsigned

~

від 0 до 4 294 967 295

~ – розмір залежить від типу комп'ютера

Обсяг пам'яті для даних типу int, unsigned int визначається довжиною машинного слова, різною для різних комп'ютерів. Для 16-роз­рядних обсяг машинного слова становить 2, для 32-розрядних – 4 байти.

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

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

Легко бачити, що при цьому найменшим від'ємним числом, що належить типу char, є число –128 – двійкове зображення 10000000, а найбільшим – число 127 (зображення 01111111). Зверніть увагу: якщо до числа 01111111 додати одиницю, то вийде 10000000, що означає: 127  1  –128. Отже, множину елементів типу char можна зобразити у вигляді згорнутого в кільце відрізка [–128; 127].

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

Розглянемо машинні значення діапазону цілих типів (табл. 5.4).

Таблиця 5.4

Тип

Діапазон значень

Машинне зображення

Char

–128...127

10000000 …

01111111

Short int

–32768...32767

00000000 10000000 …

11111111 01111111

long int

–2147483648...2147483647

00000000 00000000 00000000 10000000…

11111111 11111111 11111111 01111111

Unsigned char

0…255

00000000 …

11111111

Unsigned short int

0…65535

00000000 00000000 …

11111111 11111111

Unsigned long int

0 … 4 294 967 295

00000000 00000000 00000000 00000000

11111111 11111111 11111111 11111111