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
这里纯个人理解,如有不对的地方望指正