二进制减法在计算机底层是如何实现的
1、其实二进制减法也是通过二进制加法来进行实现的。我们知道在十进制当中a-b=a+(-b),其中b为正数,-b就称作负数,即相当于减一个数就等于加他的相反数,其实二进制减法也是用这种方式。
2、十进制里表示一个负数,在这个数前面加一个负号即可,但是二进制里你怎么加个负号呢,又怎么表示一个负数呢?
3、我们知道在十进制中一个数加一个他的相反数会等于零,例如 b+(-b)=0,比如十进制 1的二进制是0000001,要使一个数加 00000001 后等于 0,那这个数就是1的二进制相反数,这里叫补数。00000001 + ???????? =00000000 求出这个?数是11111111 , 这个数也就是0000001的相反数,二进制中称作补数。
4、那我们怎么求出二进制中的补数呢?只要把要转换的数每一位取反,就是把0就换成1,1就换成0,比如 00000001 取反变成 11111110 , 取反后再加1 变成11111111 ,这样就全部变成00000000了,就可以求出一个数的补数了。
5、我们情写硎霈规定最高位为符号位,在这个符号位放1就表示是负整数,符号位放0就表示是正整数,比如前面的 11111111 最高位是1,那么这个数就是负数,只不过刨去符号位,剩下的数不能直接转成正数,而是要取反加1,比如 刚刚的 1111111 去掉符号位,还剩7个1,111111 = 127 这样算刚刚的数就变成 -127了,这么算是错的,我们要按取反的方法来推出负数,在通过符号位判断出这个数是负数后,取反加1即可。
6、如果 1111111 既可以表示十进制的 256 又可以表示成十进制的 -1 ,那么计算机怎么知道这个是正数还是负数呢,所以给计算机这串数值时,我们要先定义一下变量类型,这也就是为什么我们在C语言里定义变量要给定变量类型的原因。