有符号数的溢出本就是不确定的(标准未定义),编译器不同可能有不同的实现。
但即使是这样(上面两种方式最后结果都一样),上面的结果也是正确的。
复杂的数学推倒就不打算研究了。
通俗理解就是,上面的语句,即使溢出去,也会溢回来。
链接:https://www.nowcoder.com/questionTerminal/55bf0d019af549a48f5dc72fc9221377
来源:牛客网
举个栗子
交换-5, -7。 以4bit为例。
-5 = 1011 (补码) -7 = 1001 (补码)
(-5)+ (-7)= 10100=0100=4 (溢出后为4)
4-(-7)= 4 +7=0100 + 0111 = 1011 = -5的补码
4-(-5)= 4 + 5 = 0100 + 0101 = 1001 = -7的补码