问题比较深究,就像我高中学物理一样为什么力等于质量与加速度相乘,显然是正确的,但我不知道原理,所以白学。
现在:
1.为什么求补码是取反再加1呢?
2.为什么规定1为正,0为负呢?
3.为什正数原码与负数进行运算要与负数的补码进行运算才正确呢?
4.为什么负数的补码取反再加1等于原码呢?
问题比较深究,就像我高中学物理一样为什么力等于质量与加速度相乘,显然是正确的,但我不知道原理,所以白学。
现在:
1.为什么求补码是取反再加1呢?
2.为什么规定1为正,0为负呢?
3.为什正数原码与负数进行运算要与负数的补码进行运算才正确呢?
4.为什么负数的补码取反再加1等于原码呢?
1:我们来看一下补码的求得过程:将原码的各位取反,再加1,得到补码。举个例子,1001,它全部取反之后就是0110,再加1得到0111。将原码与补码加相,会得到10000。我们应该知道,计算机最基础的运算器只能做加法,所以叫累加器,它做不了减法。所以当需要减法的时候我们取减数的补码,用被减数去加这个补码。如果是1111-1001=0110的话就相当于1111-(10000-0111)=1111+0111=0110,其中0111是1001的补码。由于码不像数字,码是有位数的限制的,当有多于其位数的操作时是不表现出来的,所以减去一个数的原码就相当于加上它的补码。相信,看明白了这一条,第三个问题也就解决了。
2.规定……惯例的,当初就这么说的,反正二进制就两个数,不是0就是1,取反就是对方。1比0大,正数比负数大……我是这样想的,这一点我不敢肯定。
4.不记符号位的话,原码+补码=100...0(0的位数与原码的位置一致),那你说这两个码是不是互为原补码?取补码之后再取一次补码就是自身了。