有两个32bit的数A、B,使用下面方式得到32bit的数C、D。哪一种可以使用C、D得到A、B的值?
正确答案: C 你的答案: F (错误)
C=(int32)(A+B),D=(int32)(A-B)
C=(int32)(A+B),D=(int32)((A-B)>>1)
C=(int32)(A+B),D=B
C=(int32)(A+B),D=(int32)(A+2*B)
C=(int32)(A*B),D=(int32)(A/B)
都不可以,可能溢出
选C:
当A+B未溢出时,A=C-D;
当A+B溢出时,A=C+2^32-D; 因为溢出相当于减去了2^32。
所以合起来的计算公式为: A=(C+2^32-D)%2^32 (取余数)
当A:INT_MAX B:INT_MAX,验证正确。