Начнем с обобщения примитивных типов данных Java:
byte : Тип данных Byte - это 8-битовое знаковое целое число с дополнением до двух .
Кратко : Краткий тип данных - это 16-разрядное целое число с дополнением до двух со знаком .
int: Тип данных Int представляет собой 32-битное знаковое целое число с дополнением до двух .
long: тип данных Long - это 64-битное целое число с дополнением до двух со знаком .
float: тип данных с плавающей запятой представляет собой 32-битное число с плавающей запятой одинарной точности IEEE 754 .
double : тип данных double - это 64-битный IEEE 754 с плавающей запятой двойной точности .
boolean: логический тип данных представляет один бит информации .
символ: тип данных char - это один 16-битный символ Unicode .
Источник
Два дополнения
"Хороший пример взят из взят вики что связь с дополнением до двух реализована, если отметить, что 256 = 255 + 1, а (255 - x) - это дополнение 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, -0 (1000) и +0 (0000) .
2. Дополнение к человеку
В этом представлении мы инвертируем все биты данного числа, чтобы найти его дополнительные. Например:
010 = 2, so -2 = 101 (inverting all bits).
Проблема с этим представлением заключается в том, что все еще существуют два шаблона битов для представления 0, отрицательного 0 (1000) и положительного 0 (0000).
3. Дополнение до двух
Чтобы найти отрицательное значение числа, в этом представлении мы инвертируем все биты, а затем добавляем один бит. Добавление одного бита решает проблему наличия двух битовых шаблонов, представляющих 0. В этом представлении у нас есть только один шаблон для
0 (0000) .
Например, мы хотим найти двоичное отрицательное представление числа 4 (десятичное), используя 4 бита. Сначала преобразуем 4 в двоичное:
4 = 0100
затем мы инвертируем все биты
0100 -> 1011
наконец, мы добавляем один бит
1011 + 1 = 1100.
Таким образом, 1100 эквивалентно -4 в десятичной системе, если мы используем двоичное представление с дополнением до двух с 4 битами.
Более быстрый способ найти дополнительный - установить первый бит как значение 1 и инвертировать остальные биты. В приведенном выше примере это будет примерно так:
0100 -> 1100
^^
||-(fixing this value)
|--(inverting this one)
Представление Two Complement, помимо того, что имеет только одно представление для 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
binary as is
а числа -ve хранятся вtwo's complement
?