1. 基础知识
首先,我们知道在计算机内部,不能保存一个很长的数字(比如说1e6长度的一个数字,除非用数组存储),对于int来说,4个字节,字长32,所以我们知道int可以表示的整数的个数为2^32.不妨设int所能表示的最大整数为INT_MAX,则INT_MAX+1无法用int表示,结果是一个最小的负数
2. 引入补码的意义
引入补码的意义在于简化计算,我们知道

同理,设x>0,y<0,我们在int的模系统下有x+y=x+(INT_MAX-abs(y)) mod(INT_MAX),这也是补码公式的由来,对于任何一个数y<0,都有x-abs(y)=x+y=x+(INT_MAX-abs(y)) mod(INT_MAX),这样我们就把一个减法运算转换成了加法运算,并且用一个正数INT_MAX-abs(y)>0去代替负数y<0,最后就把代数式转换为了两个正数的加法。
3. 为什么引入补码等效于(负数)各位变反,末尾+1
在y>0且y十进制值变大的的情况下,其二进制的0 1序列也会相应增加,并且我们知道最高位一定是0
对于任何y<0,都有INT_MAX+y>0,那么我们不妨建立函数f(y)=(y+INT_MAX)mod INT_MAX上,可以知道这是一个双射函数。
对于任何y1<0,其函数值f(y1)均大于任何f(y2),其中y2>0,因此,f(y1)的最高位一定是1

2万+

被折叠的 条评论
为什么被折叠?



