Начнем с резюмирования примитивных типов данных Java:
byte: байтовый тип данных - это 8-битовое знаковое целое число с дополнением до двух.
Краткий. Краткий тип данных - это 16-разрядное целое число с дополнением до двух со знаком.
int: Тип данных Int - это 32-битовое знаковое целое число с дополнением до двух.
long: тип данных Long - это 64-битное знаковое целое число с дополнением до двух.
float: Тип данных с плавающей запятой - это 32-битное число с плавающей запятой IEEE 754 с одинарной точностью.
double: тип данных double - это 64-битное число с плавающей запятой IEEE 754 с двойной точностью.
логический: логический тип данных представляет один бит информации.
char: тип данных char - это одиночный 16-битный символ Юникода.
Источник
Дополнение до двух
Хороший пример - из wiki, что связь с дополнением до двух реализуется с учетом того, что 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: -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
person
dreamcrash
schedule
16.11.2012