Почнемо з узагальнення примітивних типів даних Java:
байт : Тип даних байт - це ціле число доповнення 8-бітового двозначного знака .
Короткий : Короткий тип даних - це 16-розрядне ціле доповнення, підписане двома .
int: тип даних Int - це 32-розрядне ціле число доповнень із підписом .
long: тип даних long - це ціле доповнення 64-розрядного підписаного двоє .
float: тип даних з плаваючою є 32-бітовою плаваючою точкою IEEE 754 з однією точністю .
double : тип даних double - це 64-розрядна плаваюча точка IEEE 754 з подвійною точністю .
boolean: логічний тип даних представляє один біт інформації .
char: тип даних char - це єдиний 16-розрядний символ Unicode .
Джерело
Доповнення двох
"Хорошим прикладом є вікі, що відношення до доповнення двох реалізується, зазначаючи, що 256 = 255 + 1, а (255 - x) є доповненням x
0000 0111 = 7 доповнення двох - 1111 1001 = -7
спосіб роботи - це MSB (найбільш значущий біт) отримує від’ємне значення, так у випадку вище
-7 = 1001 = -8 + 0+ 0+ 1
Позитивні цілі числа, як правило, зберігаються у вигляді простих двійкових чисел (1 дорівнює 1, 10 дорівнює 2, 11 дорівнює 3 тощо).
Цілі від’ємні числа зберігаються як доповнення їх абсолютного значення. Доповненням позитивного числа до двох є використання цього позначення від’ємним числом.
Джерело
Оскільки я отримав кілька балів за цю відповідь, вирішив додати до неї більше інформації.
Більш детальна відповідь:
Серед інших існує чотири основних підходи до подання позитивних і негативних чисел у двійковому вигляді, а саме:
- Підписана величина
- Своє доповнення
- Доповнення Двох
- Упередженість
1. Підписана величина
Використовує найбільш значущий біт для представлення знака, решта бітів використовуються для представлення абсолютного значення. Де 0 позначає додатне число, а 1 позначає від’ємне число , приклад:
1011 = -3
0011 = +3
Це подання простіше. Однак ви не можете додавати двійкові числа так само, як і десяткові числа, ускладнюючи реалізацію на апаратному рівні. Більше того, цей підхід використовує два двійкові шаблони для представлення 0, 100 ... 0 та 0 .... 0.
2. Своє доповнення
У цьому поданні ми інвертуємо всі біти даного числа, щоб з’ясувати його доповнення. Наприклад:
010 = 2, so -2 = 101 (inverting all bits).
Проблема цього подання полягає в тому, що все ще існують два бітові шаблони, що представляють 0 (00..0 та 11..1)
3. Доповнення Двох
Щоб знайти мінус числа, у цьому поданні ми інвертуємо всі біти, а потім додаємо один біт. Додавання одного біта вирішує проблему наявності двох бітових шаблонів, що представляють 0. У цьому поданні ми маємо лише один (00 ... 0).
Наприклад, ми хочемо знайти двійкове від'ємне подання 4 (десяткового), використовуючи 4 біти. Спочатку ми перетворюємо 4 у двійковий формат:
4 = 0100
тоді ми перевертаємо всі біти
0100 -> 1011
нарешті, додаємо один біт
1011 + 1 = 1100.
Отже, 1100 еквівалентно -4 в десятковому значенні, якщо ми використовуємо двійкове представлення Доповнення Двох із 4 бітами.
Швидший спосіб знайти додаткове - це закріпити перший біт як значення 1 та інвертувати решту бітів. У наведеному вище прикладі це буде щось на зразок:
0100 -> 1100
^^
||-(fixing this value)
|--(inverting this one)
Представлення Complement Two, крім того, що має лише одне подання для 0, воно також додає два двійкові значення так само, як у десяткові, парні числа з різними знаками. Тим не менше, необхідно перевірити наявність випадків переповнення.
4. Упередженість
Це подання використовується для представлення показника ступеня в нормі IEEE 754 для плаваючих крапок. Вона має ту перевагу, що двійкове значення з усіма бітами до нуля представляє найменше значення. І двійкове значення з усіма бітами до 1 представляє найбільше значення. Як випливає з назви, значення кодується (позитивне чи негативне) у двійковому вигляді з n бітами з ухилом (зазвичай 2 ^ (n-1) або 2 ^ (n-1) -1).
Отже, якщо ми використовуємо 8 бітів, значення 1 в десятковому вигляді представляється в двійковому вигляді, використовуючи зміщення 2 ^ (n-1), значенням:
+1 + bias = +1 + 2^(8-1) = 1 + 128 = 129
converting to binary
1000 0001