что такое знаковое число
Знаковые целые числа
Особенности работы со знаковыми числами
Система команд AVR изначально оптимизирована для работы со знаковыми числами, а в регистре состояния SREG имеются три специально предназначенных для этих целей флага N, V и S.
Во флаге N хранится знака числа в дополнительном коде. В него копируется содержимое старшего бита результата большинства арифметических и логических операций. Таким образом, N=0 для неотрицательных чисел и N=1 для отрицательных.
Второй бит V из SREG – флаг переполнения в дополнительном коде. В результате действий сложения и вычитания n-разрядных знаковых чисел, в общем случае может быть получен n+1-разрядный результат и флаг V будет установлен, когда произошло переполнение 8-разрядной сетки.
Обратите внимание на следующее обстоятельство. Если трактовать те же самые числа, как “правильные” двоичные в позиционной системе исчисления (т.е. 170 = 0b10101010 и 195 = 0b10101010), то в результате их сложения также возникнет переполнение:
170 + 195 = 365 = 0b101101101 = 0b100000000 + 0b01101101.
Так как в дополнительном коде знак размещается в старшем разряде, то определить его можно, только изначально зная разрядность числа. У 8-разрядных чисел он находится во флаге N, у 9-разрядных, которые возникли в результате переполнения, истинный знак надо искать во флаге S. Значение S получается в результате операции N XOR V. В предыдущем примере S = 0 XOR 1 = 1 (т.е. результат операции сложения отрицательный).
Для изменения знака однобайтовых чисел у AVR имеется инструкция neg Rd (Rd 0 0
Не существует окончательного критерия, по которому любое из представлений является универсально превосходящим. Для целых чисел представление, используемое в большинстве современных вычислительных устройств, является дополнением до двух, хотя в мэйнфреймах серии Unisys ClearPath Dorado используется дополнение до единиц.
СОДЕРЖАНИЕ
История
Знаковое представление величины
Дополнение
Двоичное значение | Дополнительное толкование | Неподписанная интерпретация |
---|---|---|
00000000 | +0 | 0 |
00000001 | 1 | 1 |
⋮ | ⋮ | ⋮ |
01111101 | 125 | 125 |
01111110 | 126 | 126 |
01111111 | 127 | 127 |
10000000 | −127 | 128 |
10000001 | −126 | 129 |
10000010 | −125 | 130 |
⋮ | ⋮ | ⋮ |
11111101 | −2 | 253 |
11111110 | −1 | 254 |
11111111 | −0 | 255 |
Чтобы сложить два числа, представленных в этой системе, выполняется обычное двоичное сложение, но затем необходимо выполнить сквозной перенос : то есть добавить любой результирующий перенос обратно в результирующую сумму. Чтобы понять, почему это необходимо, рассмотрим следующий пример, показывающий случай добавления −1 (11111110) к +2 (00000010):
В предыдущем примере первое двоичное сложение дает 00000000, что неверно. Правильный результат (00000001) появляется только при добавлении переноса.
Два дополнения
Двоичное значение | Интерпретация дополнения до двух | Неподписанная интерпретация |
---|---|---|
00000000 | 0 | 0 |
00000001 | 1 | 1 |
⋮ | ⋮ | ⋮ |
01111110 | 126 | 126 |
01111111 | 127 | 127 |
10000000 | −128 | 128 |
10000001 | −127 | 129 |
10000010 | −126 | 130 |
⋮ | ⋮ | ⋮ |
11111110 | −2 | 254 |
11111111 | −1 | 255 |
Более простой способ получить отрицание числа в дополнении до двух выглядит следующим образом:
Пример 1 | Пример 2 | |
---|---|---|
1. Начиная справа, найдите первую «1» | 0010100 1 | 00101 1 00 |
2. Инвертируйте все биты слева от этой «1». | 1101011 1 | 11010 100 |
Пример: для +2, что равно 00000010 в двоичном формате (символ
X означает «инвертировать все биты в X»):
Смещение двоичного
Двоичное значение | Интерпретация Excess-128 | Неподписанная интерпретация |
---|---|---|
00000000 | −128 | 0 |
00000001 | −127 | 1 |
⋮ | ⋮ | ⋮ |
01111111 | −1 | 127 |
10000000 | 0 | 128 |
10000001 | 1 | 129 |
⋮ | ⋮ | ⋮ |
11111111 | +127 | 255 |
База −2
Диапазон чисел, которые могут быть представлены, асимметричен. Если слово имеет четное число битов, величина наибольшего отрицательного числа, которое может быть представлено, вдвое больше, чем наибольшее положительное число, которое может быть представлено, и наоборот, если слово имеет нечетное число битов.
Сравнительная таблица
В следующей таблице показаны положительные и отрицательные целые числа, которые могут быть представлены с помощью четырех битов.
Десятичный | Без подписи | Знак и величина | Дополнение | Два дополнения | Превышение-8 (необъективно) | База −2 |
---|---|---|---|---|---|---|
+16 | N / A | N / A | N / A | N / A | N / A | N / A |
+15 | 1111 | N / A | N / A | N / A | N / A | N / A |
+14 | 1110 | N / A | N / A | N / A | N / A | N / A |
+13 | 1101 | N / A | N / A | N / A | N / A | N / A |
+12 | 1100 | N / A | N / A | N / A | N / A | N / A |
+11 | 1011 | N / A | N / A | N / A | N / A | N / A |
+10 | 1010 | N / A | N / A | N / A | N / A | N / A |
+9 | 1001 | N / A | N / A | N / A | N / A | N / A |
+8 | 1000 | N / A | N / A | N / A | N / A | N / A |
+7 | 0111 | 0111 | 0111 | 0111 | 1111 | N / A |
+6 | 0110 | 0110 | 0110 | 0110 | 1110 | N / A |
+5 | 0101 | 0101 | 0101 | 0101 | 1101 | 0101 |
+4 | 0100 | 0100 | 0100 | 0100 | 1100 | 0100 |
+3 | 0011 | 0011 | 0011 | 0011 | 1011 | 0111 |
+2 | 0010 | 0010 | 0010 | 0010 | 1010 | 0110 |
+1 | 0001 | 0001 | 0001 | 0001 | 1001 | 0001 |
+0 | 0000 | 0000 | 0000 | 0000 | 1000 | 0000 |
−0 | 1000 | 1111 | ||||
−1 | N / A | 1001 | 1110 | 1111 | 0111 | 0011 |
−2 | N / A | 1010 | 1101 | 1110 | 0110 | 0010 |
−3 | N / A | 1011 | 1100 | 1101 | 0101 | 1101 |
−4 | N / A | 1100 | 1011 | 1100 | 0100 | 1100 |
−5 | N / A | 1101 | 1010 | 1011 | 0011 | 1111 |
−6 | N / A | 1110 | 1001 | 1010 | 0010 | 1110 |
−7 | N / A | 1111 | 1000 | 1001 | 0001 | 1001 |
−8 | N / A | N / A | N / A | 1000 | 0000 | 1000 |
−9 | N / A | N / A | N / A | N / A | N / A | 1011 |
−10 | N / A | N / A | N / A | N / A | N / A | 1010 |
−11 | N / A | N / A | N / A | N / A | N / A | N / A |
Та же таблица, если смотреть на это «учитывая эти двоичные биты, какое число интерпретируется системой представления»:
Двоичный | Без подписи | Знак и величина | Дополнение | Два дополнения | Превышение-8 | База −2 |
---|---|---|---|---|---|---|
0000 | 0 | 0 | 0 | 0 | −8 | 0 |
0001 | 1 | 1 | 1 | 1 | −7 | 1 |
0010 | 2 | 2 | 2 | 2 | −6 | −2 |
0011 | 3 | 3 | 3 | 3 | −5 | −1 |
0100 | 4 | 4 | 4 | 4 | −4 | 4 |
0101 | 5 | 5 | 5 | 5 | −3 | 5 |
0110 | 6 | 6 | 6 | 6 | −2 | 2 |
0111 | 7 | 7 | 7 | 7 | −1 | 3 |
1000 | 8 | −0 | −7 | −8 | 0 | −8 |
1001 | 9 | −1 | −6 | −7 | 1 | −7 |
1010 | 10 | −2 | −5 | −6 | 2 | −10 |
1011 | 11 | −3 | −4 | −5 | 3 | −9 |
1100 | 12 | −4 | −3 | −4 | 4 | −4 |
1101 | 13 | −5 | −2 | −3 | 5 | −3 |
1110 | 14 | −6 | −1 | −2 | 6 | −6 |
1111 | 15 | −7 | −0 | −1 | 7 | −5 |
Другие системы
Аналогичный метод используется в стандартах сжатия видео H.264 / MPEG-4 AVC и H.265 High Efficiency Video Coding для расширения экспоненциального кодирования Голомба до отрицательных чисел. В этом расширении младший бит является почти знаковым; ноль имеет тот же самый младший бит (0), что и все отрицательные числа. Этот выбор приводит к тому, что представимое положительное число наибольшей величины на единицу больше отрицательного числа наибольшей величины, в отличие от дополнения до двух или зигзагообразного кодирования буферов протокола.
В вычисление, представление числа со знаком требуются для кодирования отрицательные числа в двоичных системах счисления.
В математика, отрицательные числа в любой системе отсчета представляются предшествующим знаком минус («-«). Однако в компьютерное железо, числа представлены только как последовательности биты, без лишних символов. Четыре самых известных метода расширения двоичная система счисления представлять числа со знаком находятся: знак и величина, дополнение, два дополнения, и смещение двоичное. Некоторые из альтернативных методов используют неявные знаки вместо явных, например отрицательный двоичный код, используя основание −2. Соответствующие методы могут быть разработаны для другие базы, будь то положительные, отрицательные, частичные или другие разработки по таким темам.
Не существует окончательного критерия, по которому любое из представлений универсально превосходит. Для целых чисел представление, используемое в большинстве современных вычислительных устройств, является дополнением до двух, хотя Серия Unisys ClearPath Dorado мэйнфреймы используют дополнение до единиц.
Содержание
История
Первые дни цифровых вычислений были отмечены множеством конкурирующих идей как в отношении аппаратных технологий, так и математических технологий (систем счисления). Одним из самых больших споров был формат отрицательных чисел, когда некоторые из самых опытных людей той эпохи имели очень сильные и разные мнения. [ нужна цитата ] Поддерживается один лагерь два дополнения, система, которая сегодня доминирует. Другой лагерь поддерживал дополнение, где любое положительное значение превращается в его отрицательный эквивалент путем инвертирования всех битов в слове. Третья группа поддерживает «знак и величина» (знак-величина), где значение изменяется с положительного на отрицательное просто путем переключения бита знака (старшего разряда) слова.
Были аргументы за и против каждой из систем. Знак и величина позволили упростить отслеживание дампов памяти (распространенный процесс в 1960-х годах), поскольку для небольших числовых значений используется меньше 1 бит. Внутри этих систем выполнялась математика с дополнением до единиц, поэтому числа нужно было преобразовать в значения с дополнением до единиц, когда они были переданы из регистра в математический блок, а затем преобразовать обратно в знаковую величину, когда результат был передан обратно в регистр. Электронике требовалось больше вентилей, чем другим системам, что было ключевой проблемой, когда стоимость и упаковка дискретных транзисторов были критическими. IBM была одним из первых сторонников знаковой величины. 704, 709 и 709x компьютеры серии, пожалуй, самые известные системы, использующие его.
Знаковое представление величины
Дополнение
Двоичное значение | Дополнительное толкование | Неподписанная интерпретация |
---|---|---|
00000000 | +0 | 0 |
00000001 | 1 | 1 |
⋮ | ⋮ | ⋮ |
01111101 | 125 | 125 |
01111110 | 126 | 126 |
01111111 | 127 | 127 |
10000000 | −127 | 128 |
10000001 | −126 | 129 |
10000010 | −125 | 130 |
⋮ | ⋮ | ⋮ |
11111101 | −2 | 253 |
11111110 | −1 | 254 |
11111111 | −0 | 255 |
В качестве альтернативы, система, известная как дополнение [6] может использоваться для представления отрицательных чисел. Дополнительной формой отрицательного двоичного числа для единиц является побитовое НЕ применительно к нему, то есть «дополнение» его положительного аналога. Как и представление знака и величины, дополнение до единиц имеет два представления 0: 00000000 (+0) и 11111111 (−0). [7]
Например, форма дополнения до единиц 00101011 (4310) становится 11010100 (−4310). Диапазон подписанный числа с дополнением до единиц представлены −(2 N−1 − 1) к (2 N−1 − 1) и ± 0. Обычный восьмиразрядный байт равен −127.10 до +12710 где ноль равен либо 00000000 (+0), либо 11111111 (-0).
Чтобы сложить два числа, представленных в этой системе, выполняется обычное двоичное сложение, но затем необходимо выполнить бесконечный перенос: то есть добавить любой результат нести обратно в полученную сумму. [8] Чтобы понять, почему это необходимо, рассмотрим следующий пример, показывающий случай добавления −1 (11111110) к +2 (00000010):
В предыдущем примере первое двоичное сложение дает 00000000, что неверно. Правильный результат (00000001) появляется только тогда, когда перенос добавлен обратно.
Замечание по терминологии: система называется «дополнением до единицы», потому что отрицание положительного значения Икс (представлен как побитовое НЕ из Икс ) также можно сформировать вычитанием Икс из дополнительного представления нуля до единиц, которое является длинной последовательностью единиц (−0). С другой стороны, арифметика с дополнением до двух образует отрицание Икс путем вычитания Икс от одной большой степени двойки, то есть конгруэнтный до +0. [9] Следовательно, представление одного и того же отрицательного значения дополнением до единицы и дополнением двух будет отличаться на единицу.
Обратите внимание, что представление отрицательного числа с дополнением единиц может быть получено из представления знаковой величины просто путем побитового дополнения величины.
Два дополнения
Двоичное значение | Интерпретация дополнения до двух | Неподписанная интерпретация |
---|---|---|
00000000 | 0 | 0 |
00000001 | 1 | 1 |
⋮ | ⋮ | ⋮ |
01111110 | 126 | 126 |
01111111 | 127 | 127 |
10000000 | −128 | 128 |
10000001 | −127 | 129 |
10000010 | −126 | 130 |
⋮ | ⋮ | ⋮ |
11111110 | −2 | 254 |
11111111 | −1 | 255 |
Проблемы множественных представлений 0 и необходимость бесконечный перенос обходятся системой, называемой два дополнения. В дополнении до двух отрицательные числа представлены битовой комбинацией, которая на единицу больше (в беззнаковом смысле), чем дополнение единиц положительного значения.
Более простой способ получить отрицание числа в дополнении до двух:
Пример 1 | Пример 2 | |
---|---|---|
1. Начиная справа, найдите первую «1» | 00101001 | 00101100 |
2. Инвертируйте все биты слева от этой «1». | 11010111 | 11010100 |
Пример: для +2, что равно 00000010 в двоичном формате (символ
обозначает C побитовое НЕ оператор, поэтому
X означает «инвертировать все биты в X»):
Смещение двоичное
Двоичное значение | Интерпретация Excess-128 | Неподписанная интерпретация |
---|---|---|
00000000 | −128 | 0 |
00000001 | −127 | 1 |
⋮ | ⋮ | ⋮ |
01111111 | −1 | 127 |
10000000 | 0 | 128 |
10000001 | 1 | 129 |
⋮ | ⋮ | ⋮ |
11111111 | +127 | 255 |
Предвзятые представления теперь в основном используются для показателя степени плавающая точка числа. В Стандарт IEEE 754 с плавающей запятой определяет поле экспоненты одинарная точность (32-битное) число как 8-битное превышение-127 поле. В двойная точность (64-битное) поле экспоненты является 11-битным превышение-1023 поле; видеть смещение экспоненты. Он также использовался для двоичных десятичных чисел как превышение-3.
База −2
Диапазон чисел, которые могут быть представлены, асимметричен. Если слово имеет четное число битов, величина наибольшего отрицательного числа, которое может быть представлено, вдвое больше, чем наибольшее положительное число, которое может быть представлено, и наоборот, если слово имеет нечетное число битов.
Сравнительная таблица
В следующей таблице показаны положительные и отрицательные целые числа, которые можно представить с помощью четырех битов.
Десятичный | Неподписанный | Знак и величина | Дополнение | Два дополнения | Превышение-8 (необъективно) | База −2 |
---|---|---|---|---|---|---|
+16 | Нет данных | Нет данных | Нет данных | Нет данных | Нет данных | Нет данных |
+15 | 1111 | Нет данных | Нет данных | Нет данных | Нет данных | Нет данных |
+14 | 1110 | Нет данных | Нет данных | Нет данных | Нет данных | Нет данных |
+13 | 1101 | Нет данных | Нет данных | Нет данных | Нет данных | Нет данных |
+12 | 1100 | Нет данных | Нет данных | Нет данных | Нет данных | Нет данных |
+11 | 1011 | Нет данных | Нет данных | Нет данных | Нет данных | Нет данных |
+10 | 1010 | Нет данных | Нет данных | Нет данных | Нет данных | Нет данных |
+9 | 1001 | Нет данных | Нет данных | Нет данных | Нет данных | Нет данных |
+8 | 1000 | Нет данных | Нет данных | Нет данных | Нет данных | Нет данных |
+7 | 0111 | 0111 | 0111 | 0111 | 1111 | Нет данных |
+6 | 0110 | 0110 | 0110 | 0110 | 1110 | Нет данных |
+5 | 0101 | 0101 | 0101 | 0101 | 1101 | 0101 |
+4 | 0100 | 0100 | 0100 | 0100 | 1100 | 0100 |
+3 | 0011 | 0011 | 0011 | 0011 | 1011 | 0111 |
+2 | 0010 | 0010 | 0010 | 0010 | 1010 | 0110 |
+1 | 0001 | 0001 | 0001 | 0001 | 1001 | 0001 |
+0 | 0000 | 0000 | 0000 | 0000 | 1000 | 0000 |
−0 | 1000 | 1111 | ||||
−1 | Нет данных | 1001 | 1110 | 1111 | 0111 | 0011 |
−2 | Нет данных | 1010 | 1101 | 1110 | 0110 | 0010 |
−3 | Нет данных | 1011 | 1100 | 1101 | 0101 | 1101 |
−4 | Нет данных | 1100 | 1011 | 1100 | 0100 | 1100 |
−5 | Нет данных | 1101 | 1010 | 1011 | 0011 | 1111 |
−6 | Нет данных | 1110 | 1001 | 1010 | 0010 | 1110 |
−7 | Нет данных | 1111 | 1000 | 1001 | 0001 | 1001 |
−8 | Нет данных | Нет данных | Нет данных | 1000 | 0000 | 1000 |
−9 | Нет данных | Нет данных | Нет данных | Нет данных | Нет данных | 1011 |
−10 | Нет данных | Нет данных | Нет данных | Нет данных | Нет данных | 1010 |
−11 | Нет данных | Нет данных | Нет данных | Нет данных | Нет данных | Нет данных |
Та же таблица, если смотреть со стороны «учитывая эти двоичные биты, какое число интерпретируется системой представления»:
Двоичный | Неподписанный | Знак и величина | Дополнение | Два дополнения | Превышение-8 | База −2 |
---|---|---|---|---|---|---|
0000 | 0 | 0 | 0 | 0 | −8 | 0 |
0001 | 1 | 1 | 1 | 1 | −7 | 1 |
0010 | 2 | 2 | 2 | 2 | −6 | −2 |
0011 | 3 | 3 | 3 | 3 | −5 | −1 |
0100 | 4 | 4 | 4 | 4 | −4 | 4 |
0101 | 5 | 5 | 5 | 5 | −3 | 5 |
0110 | 6 | 6 | 6 | 6 | −2 | 2 |
0111 | 7 | 7 | 7 | 7 | −1 | 3 |
1000 | 8 | −0 | −7 | −8 | 0 | −8 |
1001 | 9 | −1 | −6 | −7 | 1 | −7 |
1010 | 10 | −2 | −5 | −6 | 2 | −10 |
1011 | 11 | −3 | −4 | −5 | 3 | −9 |
1100 | 12 | −4 | −3 | −4 | 4 | −4 |
1101 | 13 | −5 | −2 | −3 | 5 | −3 |
1110 | 14 | −6 | −1 | −2 | 6 | −6 |
1111 | 15 | −7 | −0 | −1 | 7 | −5 |