如何求补码
回答问题之前先让我们来了解一下:
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。
反码的表示方法是:正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
补码的表示方法是:正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1 (即在反码的基础上+1)。
因此我们在求一个数的补码之前,应当先求出这个数的原码。
将一个数转化为二进制数,既是它的源码。可通过除二求余法算得(既对一个数除二求余,这会得出一个数和一个余数,再对得出来的数进行求余,得出余数,以此类推,最后将余数倒写即可)。
如是一个正数,它的补码与它的原码相同;如果是一个负数,它的补码是在它的原码的基础上,开头符号位不变,其余各位取反,最后再在其上面+1(既在反码的基础上+1)。
正数的补码,是其本身。
负数的补码,就用它的正数,减一取反,即可得到补码。
如,+9 补码是:0000 1001。
下面求-9 补码:
先减一:0000 1001 - 1 = 0000 1000;
再取反:1111 0111。
所以有:-9 补码 = 1111 0111。
这不就完了吗?
简不简单?意不意外?
原码反码符号位,讨论这些垃圾干嘛?
----------------------
由补码换算到十进制数,也极其简单。
你只需记住:【补码首位的权,是负数】。
一般的八位二进制数,各个位的权是:128、64、32、16、8、4、2、1;
如果是八位的补码,各个位的权则是:-128、64、32、16、8、4、2、1。
假如,有一个补码是:1110 0001,
它代表的十进制数是:-128 + 64 + 32 + 1 = -31。
又如,另一个补码是:0110 0001,
它代表的十进制数是:0 + 64 + 32 + 1 = +97。
你看吧,仅仅使用【进制转换】,不就完事了!
----------------------
所谓的:机器数真值符号位原码反码取反加一符号位不变模符号位也参加运算 ... ,
都是【忽悠】!
这些计算机大佬,都是在【卖拐】。