文章标题用补码不是很合适,但是目前自己还是比较乱,没理出什么头绪来。
先明白一个关系:在计算机系统中,机器码到底是独以补码的形式保存数据或字符,还是原码补码兼而有之。
何为带符号数?何为不带符号数?
如果是带符号数那就包括 "+","-"罗,为保存符号必须腾出一位用来专门保存。
如果是无符号数,就是默认为正数,所有的分配位都仅仅是用来存储数值的。
那么补码是专门针对有符号数而设置的还是怎么的?
为什么要设立补码呢?
书上如下解释:
第一是为了能让计算机执行减法:
[a-b]补=a补+(-b)补
第二个原因是为了统一正0和负0
正零:00000000
负零:10000000
这两个数其实都是0,但他们的原码却有不同的表示。
但是他们的补码是一样的,都是00000000
特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!)
[10000000]补
=[10000000]反+1
=11111111+1
=(1)00000000
=00000000(最高位溢出了,符号位变成了0
我对于正0负0我可以理解,但是上面说的统一了加减法,这就有点纳闷,不太理解。
OK,加减法的统一我开始理解了。加法还是和以前一样做,只是减法便的不一样了,应用补码,则只需做加