Sign-Magnitude, Ones' Complement, Two's Complement 为什么要使用原码、反码、补码

为什么要使用原码 反码 补码. 前言: 随着学习计算机知识的加深,许多地方都遇到原码、反码、补码。很多关于计算机的书籍都介绍原码、反码、补码的表示方法,但是为什么要用到原码、反码、补码却没详细说。为什么要使用?它们的原理是什么呢?我搜索了许多资料,也查找了许多书籍,终于弄明白了这个问题,收集整理如下。 我们知道数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制。而在日常生活中人们使用的是十进制,并且我们用的数值有正负之分。于是在计算机中就用一个数的最高位存放符号(0为正,1为负)。这就是机器数的原码了。 有了数值的表示方法就可以对数进行算术运算,但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits (1) <sub>10</sub> - (1)<sub>10</sub> = (1)<sub>10</sub> + (-1)<sub>10</sub> = (0)<sub>10</sub> (0 0000001)<sub>原</sub> + (1 0000001)<sub>原</sub> = (1 0000010)<sub>原</sub> = ( -2 )显然不正确。 因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上。对除符号位外的其余各位逐位取反就产生了反码。反码的取值空间和原码相同且一一对应。下面是反码的减法运算: (1)<sub>10</sub> - (1)<sub>10</sub> = (1)<sub>10</sub> + (-1)<sub>10</sub> = (0)<sub>10</sub> (0 0000001)<sub>反</sub> + (1 1111110)<sub>反</sub> = (1 1111111)<sub>反</sub> = ( -0 )有问题。 (1)<sub>10</sub> - (2)<sub>10</sub> = (1)<sub>10</sub> + (-2)<sub>10</sub> = (-1)<sub>10</sub> (0 0000001)<sub>反</sub> + (1 1111101)<sub>反</sub> = (11111110)<sub>反</sub> = (-1)正确。 ...

Created 3036-07-03 · Updated 9096-10-09 · 1 min · 154 words · -