5

I know that the r-1 complement for r-base number should do end around carry if the highest bit has carry.

But I cannot figure out why it should do it.

I merely can think about it is the reason may be about the two representations for zero.

ex:

 1 1 1 0    (-1)
 0 1 0 1    (+5)  
 ===============
10 0 1 1  =====>(0 1 0 0)
I just can explain it from the result that because its sum is positive, and 1's complement has two representations, so it should add one.

ex:

 1 1 1 0    (-1)
 1 0 1 0    (-5)  
 ===============
11 0 1 1  =====>(1 0 0 1)
And I cannot explain it why should add one.

What is the really reason for end around carry?

Thx for you reading it.

Jason
  • 1,573
  • 3
  • 18
  • 46
  • It's just part of the definition of ones' complement arithmetic. – Barmar Oct 18 '12 at 11:04
  • It's worth noting that 1's complement is required when creating checksums for a UDP packet. [See here](http://www.networksorcery.com/enp/protocol/icmp.htm#ICMP%20Header%20Checksum). – BugHunterUK Jul 17 '17 at 15:07

1 Answers1

11

End-around carry is actually rather simple: it changes the modulus of the addition operation from rn to rn–1, if you think of the numbers as unsigned. To simplify things, let's talk about binary.

Let's compute (-2) + (-4) using four-bit two's complement arithmetic:

  1 1 1 0    (-2)
+ 1 1 0 0  + (-4)
---------  ------
1 1 0 1 0    (-6)

Let's keep the carry bit where it is for now. If you look at the numbers as unsigned integers, we're computing 14 + 12 = 26. However, addition is done modulo 16, so we get 10, which is the unsigned number which represents -6 (the correct result).

In ones' complement, the numbers have different representations:

  1 1 0 1    (-2)
+ 1 0 1 1  + (-4)
---------  ------
1 1 0 0 0    (-6)

Again, let's keep the carry bit where it is. If you look at the numbers as unsigned integers, we're computing 13 + 11 = 24. However, due to the wrap-around carry, addition is done modulo 15, so we end up with 9, which represents -6 (the correct result).

So in four-bit two's complement, -2 is equivalent to 14 modulo 16, -4 is equivalent to 12 modulo 16, and -6 is equivalent to 10 modulo 16.

And in four-bit ones' complement, -2 is equivalent to 13 modulo 15, -4 is equivalent to 11 modulo 15, and -6 is equivalent to 9 modulo 15.

Signed zero: The reason you get "signed zero" is because there are 16 possible numbers in four bit, but if you're doing modulo-15 arithmetic, then 0 and 15 are equivalent. That's all there is to it.

Dietrich Epp
  • 205,541
  • 37
  • 345
  • 415
  • Thanks @Dietrich Epp, but could you please explain this part: `"However, due to the wrap-around carry, addition is done modulo 15,"`? – user51462 Aug 18 '23 at 01:54
  • If you have a 4-bit number and ignore the carry bit when you add, then you get modulo 16 arithmetic. If you have a 4-bit number and wrap the carry bit around, then every time you get an extra +1, which is the same effect as doing your arithmetic in base 15. – Dietrich Epp Aug 19 '23 at 01:04