补码原理
补码“取反再加一”的定义,听着就很没有来头。其实用同余就能解释。感觉这玩意被搞成玄学了。。
对于一个int类型的数,除去符号位,补码的后面31位都和原数\(\bmod {2^{31}}\)同余,而考虑上符号位,和原数\(\bmod {2^{32}}\)同余。
只需要管负数,负数加上\(2^{31}\),相当于让后面31位“取反再加1”,再算上符号位的话,相当于又加上一个\(2^{31}\),也就是\(2^{32}\)。
然后就没了。
补码“取反再加一”的定义,听着就很没有来头。其实用同余就能解释。感觉这玩意被搞成玄学了。。
对于一个int类型的数,除去符号位,补码的后面31位都和原数\(\bmod {2^{31}}\)同余,而考虑上符号位,和原数\(\bmod {2^{32}}\)同余。
只需要管负数,负数加上\(2^{31}\),相当于让后面31位“取反再加1”,再算上符号位的话,相当于又加上一个\(2^{31}\),也就是\(2^{32}\)。
然后就没了。