two's complement

About to read computer science, I have just stumbled accross the concept of "Two's complement". I understand how to apply the "algorithm" to calculate these on paper, but I have not yet obtained an understanding of why it works. I think this site: https://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html provides an explanaition why "flipping the digits" and adding one produces the compliment. What I do not understand is why adding the complement is equivalent to substracting the original number. Could somebody please give an explanation (maybe with a decimal example of the same concept as well?)?

Many thanks!

----------------------------------------------------------------------------

I'll stick to 8-bit quantities, but the same applies in general.

The key to understanding two's complement is to note that we have a set of finitely many (in particular, 2828) values in which there is a sensible notion of addition by 11 that allows us to cycle through all of the numbers. In particular, we have a system of modular arithmetic, in this case modulo 28=25628=256.


Intuitively, arithmetic modulo nn is a system of addition (and subtraction) in which overflow and underflow cause you to "cycle back" to a value from 00 to n1n−1. A classic example is the usual "clock arithmetic", which is to say arithmetic modulo 1212.

For example, if it is 11:0011:00 now, then three hours later it will be 2:002:00, since

11+3=142(mod12)11+3=14≡2(mod12)

and similarly, if it is 1:001:00, then 44 hours ago it was 99 since

14=39(mod12)1−4=−3≡9(mod12)

Notice that subtracting 44 hours on the clock is the same as adding 124=812−4=8 hours. In particular, we could have computed the above as follows:

141+8=9(mod12)1−4≡1+8=9(mod12)

That is: when performing arithmetic modulo nn, we can subtract xx by adding nxn−x.

 


Now, let's apply this idea modulo 256256. How do you subtract 33? Well, by the above logic, this is the same as adding 2563=253256−3=253. In terms of binary, we say that subtracting 0000001100000011 is the same as adding

100000000800000011=1+11111111800000011=1111101100000000⏞8−00000011=1+11111111⏞8−00000011=1111101

and there's your two's complement.

 

Notably, we don't think of 11111011111101 as being 253253 in our 88-bit system, we instead consider it to represent the number 3−3. Rather than having our numbers go from 00 to 255255 around a clock, we have them go from 128−128 to 127127, where x−x occupies the same spot that nxn−x would occupy for values of xx from 11 to 128128.


Note: an interesting infinite analog to the two's complement system of subtraction is that of infinite series 2-adic numbers. In particular, we can say something strange like

11111=1

转载于:https://www.cnblogs.com/oxspirt/p/10576726.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值