Діапазон підписаних та неподписаних типів даних


0

Так що, якщо charє , 1 byteотже , це 8 біт, НЕ так?

Так 2 ^ 8 = 256 і 0 до 255 - це діапазон знаків?

Як це працює з підписаними та непідписаними входами? Інт - 4 байти, так що 32 біти, значить 2 ^ 32. 2 ^ 31 - 1 дасть вам позитивний діапазон підписаних вводів, так що відбувається з 32-м бітом? Чи використовується для знака? Як знак може зберігатися в пам'яті?


"Отже, якщо char - 1 байт, значить, це 8 біт, правда?" Тільки якщо байт становить 8 біт. Закон про це не існує, і комп'ютери були побудовані з розмірами символів 6, 8, 10 і 12 біт. Аналогічно, int(у С) може бути будь-якої ширини 16 біт або більше. Що стосується знаку, то Google "додає двох".
Даніель Р Хікс

Відповіді:


0

Якщо тип даних визначений як підписаний тип, існують різні типи представлення - головним чином представлення підписаної величини та представлення двох доповнень.

Для представленого представлення величини, так, біт знаків зберігався як найзначніший біт (MSB, тобто крайній лівий біт). MSB з 0 представляють позитивну цифру, а 1 - негативну. Приклад:

 7 = 00000111
-7 = 10000111

Це просте і (відносно) для людини зрозуміле, проте цілі типи зазвичай не зберігаються таким чином для двох проблем:

(1) Існує два подання для нуля, +0 і -0. Потрібно порівнювати фігури, оскільки це створює особливий випадок.

(2) Обчислити непросто (так просто, як додавання і віднімання). Додавання двох позитивних чисел, додатного числа до від’ємного числа, від’ємного числа до додатного числа та додавання двох від’ємних чисел - це чотири різних випадки використання. наприклад, 7 + 6 прямо вперед

          1   Carry bit
 7 = 00000111
 6 = 00000110  (Logic for add)
..   ........
13 = 00001101

Під час обчислення 7 + (- 6) означає логіку віднімання, яку слід використовувати замість цього

 7 = 00000111
-6 = 10000110  (Logic for subtraction)
..   ........
 1 = 00000001

Діапазон для 8-бітного числа є - (2 ^ 7) +1 до 2 ^ 7-1 (тобто від -127 до +127, з двома нулями +0 і -0). Підписане зображення величини в основному використовується для збереження плаваючих чисел.

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

Наприклад, для представлення -6 ми робимо наступні кроки

 6 = 00000110
 Invert all bits:  11111001
 Add one: 11111010

Отже -6 представлений як 11111010. З двома представниками доповнення, ви все ще можете прочитати знак із MSB; в той час як існує тільки одне подання для нуля: 00000000.

Виконання обчислень з двійковими числами також легко представити в представленні комплементу двох - додавання додає. Давайте ще раз побачимо, як це працює для обчислення 7 + (- 6):

     1111111   Carry bit
 7 = 00000111
-6 = 11111010  (Logic for add)
..   ........
 1 = 00000001

Діапазон для 8-бітного числа - от (2 ^ 7) до 2 ^ 7-1 (тобто від -128 до +127). Зауважте, що діапазон відрізняється від підписаного масштабного подання.


Дякую за обширну відповідь. Тепер я повинен шукати комплімент двох, підписаний представлення величини ...
user341814
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.