二補數

补码的工作原理

为什么补码能这么巧妙实现了正负数的加减运算？答案是：指定n比特字长，那么就只有2ⁿ个可能的值，加减法运算都存在上溢出与下溢出的情况，实际上都等价于模2ⁿ的加减法运算。这对于n比特无符号整数类型或是n比特有符号整数类型都同样适用。
例如，8位无符号整数的值的范围是0到255.因此4+254将上溢出，结果是2，即。
例如，8位有符号整数的值的范围，如果规定为−128到127,则126+125将上溢出，结果是−5，即。
对于8位字长的有符号整数类型，以2⁸即256为模，则
所以模256下的加减法，用0, 1, 2,…, 254,255表示其值，或者用−128, −127,…, −1, 0, 1, 2,…,127是完全等价的。−128与128，−127与129，…，−2与254，−1与255可以互换而加减法的结果不变。从而，把8位（octet）的高半部分（即二进制的1000 0000到1111 1111）解释为−128到−1，同样也实现了模256的加减法，而且所需要的CPU加法运算器的电路实现与8位无符号整数并无不同。
实际上对于8比特的存储单元，把它的取值[00000000,…, 11111111]解释为[0, 255],或者[-1, 254]，或者[-2, 253]，或者[-128, 127]，或者[-200, 55]，甚至或者[500, 755]，对于加法硬件实现并无不同。

加法

二补数系统数字的加法和一般加法相同，而且在运算完成后就可以看出结果的正负号，不需特别的处理。
正数与负数相加不会出现上溢错误，因为它们的和一定会小于加数。上溢错误只有在两个正数或两个负数相加时才可能发生，这时候最高有效位（正负号）会变成相反。
以15加-5为例：
 11111 111（进位）
  0000 1111 (15)
+ 1111 1011 (-5)
==================
  0000 1010 (10)
由于加数和被加数都是8位，因此运算结果也限制在8位内。第8位相加后产生的进位不考虑（因为不存在第9比特）的1被忽略，所以其结果为10。而15 + (-5) = 10，计算结果正确。
在以上计算式中，可以由进位列的最左侧二个比特得知结果是否出现溢出。溢出就是数字的绝对值太大，以致于无法在指定的二进制比特个数来表示（在此例中，是超过8位的范围）。若进位列的最左侧二个比特同为0或同为1，表示结果正确，若是一个为0，另一个为1，表示出现溢出错误。也可以对此二个比特进行异或运算，结果为1时，表示出现溢出错误。以下以7 + 3的4位加法说明溢出错误的情形。
 0111 (进位)
  0111 (7)
+ 0011 (3)
=============
  1010 (−6)  結果不正確！
在此例中，进位列的最左侧二个比特为01，因此出现溢出错误。溢出的原因是7 + 3的结果(10)超过补码系统4位所可以表示的数字范围-8~7。
故为防止溢出错误，二补数在进行加法运算时通常将符号位进行复制后追加到最高位之前，即设二补数B的位数为WIDTH，则B′={B[WIDTH-1],B}。应注意此处B′的位数为WIDTH+1。
如上两例用此方法进行计算：
  11 1111 111（进位）
   0 0000 1111 (15)
  +1 1111 1011 (-5)
 ==================
(1)0 0000 1010 (10)
由于WIDTH+1=8+1=9，故而第十位的1同样由于溢出而被省略，结果仍为10。两负数(符号位为1)相加时同理。
   111 (进位)
 0 0111 (7)
+0 0011 (3)
=============
 0 1010 (10)  结果正确！
由于WIDTH+1=4+1=5，故第五位的0仍为符号位，得结果正数10(十进制)。

减法

减法通常转化为加法进行运算，将减数取补之后，再与被减数进行加法运算，即可得出差。

乘法

乘法在计算机的世界里其实就是不断的做加法。
例如:3*5=3+3+3+3+3=15

除法

除法就是相减。
例如：10/3=10-3-3-3=1mod3
而减法又可做二的补数相加，所以所有四则运算的基础都是由加法而来。