1.2 原码、反码与补码

题单介绍

在计算机中表示自然数,可以直接用二进制进行存储。 但是负数应该怎么表示呢? 最简单的想法就是把二进制的最高位当做符号位(最高位为0表示正数,为1则表示负数),其他位记录这个数的绝对值。我们把这种表示法称作**原码**表示法。 这种想法看起来没问题,但是在进行加法的时候就会发现 1+(-1)=0000 0001 + 1000 0001 = 1000 0010 = -2 这很明显是不对的,因为这样表示后,加法相当于绝对值相加。 对于这个问题,我们又想了个办法。那就是不只是把最高位变成1,而是要把每一位取反。我们把这种表示法称作**反码**表示法。 比如1的二进制是0000 0001,那么-1就是1111 1110。 那么这个时候加负数就相当于减法了。比如: 1+(-1) = 0000 0001 + 1111 1110 = 1111 1111 = -0 但是用了反码表示法后再进行加减运算,会发现答案总是会差1 对于这个问题,我们又又想了个办法。那就是在把最高位变成1,再把每一位取反后,再+1。我们把这种表示法称作**补码**表示法。 在这种表示法下不管加减乘除都能被正确的计算。所以在计算机里都是**采用补码来表示整数**。 1+(-1) = 0000 0001 + 1111 1111 = 1 0000 0000 = 0000 0000(截去多余的高位)= 0 在计算机中,如果运算时发生溢出,则计算机会把溢出的位截去。 [习题](https://www.luogu.com.cn/paste/xfq2seep)

题目列表