При арифметичних операціях

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

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

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

а) б)

0 101 1 011

+ +

0 1011 011

1 010 10110.

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

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

Пригадаємо, що в мові 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   Від –128 до 127
Signed int Signed,int ~  
Signed short in Short, Signed short   від –32 768 до 32 767
Signed long int Long, Signed long   від –2 147 483 648 до 2 147 483 647
Unsigned char Unsigned char   Від 0 до 255
Unsigned short int Unsigned short   Від 0 до 65 535
Unsigned long int Unsigned long   Від 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 …
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 …
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

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: