2025-1-3更新,最开始问题产生于HM期间。
最近遇到时间差值的问题,使用减法计算,也可以用abs函数解决,从而又一次接触到补码。
补码的问题,微机原理应该学过,无奈都还给老师了,细节也忘记了。
1、y
存在的原因是因为,mcu只有加法器,其他的运算都是靠加法来完成的。
2、方法
计算机学家定义好了,正数的补码是其本身,负数的补码是除去最高位为符号位为1其余位取反加1。加1,是为了解决+0和-0的问题。
减法运算等于减数加被减数的补码。
3、注意事项
3.1 正数相加符号位会产生进位
两个用补码表示的数相加时,如果符号位有进位,则进位被舍弃。
3.2 溢出
当进行无符号数的减法时,如果被减数小于减数,结果会“下溢”(underflow),导致产生一个非常大的数,而不是负数。
有符号加减法也应注意溢出的问题。