#binary #integer-arithmetic
Вопрос:
https://www.ietf.org/rfc/rfc1071.txt
Я вижу, что «дополнение 1» упомянуто выше. Но я не нахожу его официального определения. Может ли кто-нибудь сообщить мне, что это такое?
Ответ №1:
В арифметике дополнения единиц последний бит переноса оборачивается и добавляется к результату (перенос в конце). Это также описано в RFC 1071:
На машине дополнения 2 сумма дополнения 1 должна быть вычислена с помощью «переноса конца», т. е. Любые переполнения из наиболее значимых битов добавляются в наименее значимые биты.
В псевдокоде это может быть реализовано следующим образом:
Function Sum(a: Int16, b: Int16): Int16 {
c: Int32 := a b
return (c AND 0xFFFF) (c >> 16)
}
Пример
F000
1009
-------
0009
0001 // add carry
-------
000A
Причина, по которой арифметика дополнения единиц используется в RFC 1071, заключается, я полагаю, в том, что многие компьютерные системы использовали ее в то время, когда в 1970-х годах была разработана контрольная сумма в Интернете. На этой странице Википедии описано, почему перенос в конце необходим, когда биты представляют целые числа со знаком.
Ответ №2:
дополнение 1-это представление чисел, в котором, чтобы получить отрицательное значение числа, вы просто переворачиваете все биты. Сложение в этом формате будет просто включать представление чисел как таковых, а затем выполнение двоичного сложения.