跳转至

为什么用补码,为什么有符号单字节最小是-128

1.为什么用补码

先说明同余的概念:同余运算及其基本性质 关于同余负数问题,可以用负数,但是得想清楚为啥

怎样直白地理解补码原理?

参考上面文章基本能明白了为什么用补码,为了用加法器能计算负数; 总结上面的结论: 那为什么正负数要隔开呢? ———为了制造出类似原码的符号位,这样补码转换原码的时候,就可以区分转换了。正数不变,负数取反加一。

为什么是取反加一呢? ———根据原码负数时 [x]补=M-|x|推出来的 ,这是原始式子,也挺好记的比如-8的补码就是256-8 = 248,-128的就是128,。

那为什么原码取反加一为补码,补码取反加一为原码? ———因为负数的补码,根据前面所说和原码是互补的,根据[x]补=M-|x|推出来的公式。肯定是相同的,所以求原码也就相当求补了。


2.为什么有符号单字节最小是-128

这里说下为啥有符号单字节最小取-128,而不是最大取128,这里纠结了好久了。 -128的补码是10000000,如果128存在也是10000000; 1.假设10000000代表128,则计算128+1 为:

        10000000
     +  00000001
---------------------    
        10000001

而10000001是-127,加法器计算错误; 2.假设10000000代表-128,则计算-128+1 为:

        10000000
     +  00000001
---------------------    
        10000001

而10000001是-127,加法器计算正确; 所以取10000000为-128

这里纯个人理解,如有不对的地方望指正