计算机使用的是二进制,且计算机是以补码的方式进行存储数据的,补码是通过原码、反码一步步演变而来的。
1:源码,反码,补码
原码:第一位符号位数为0是正,1是负。
反码:是在原码的基础上进一步改进,正数时反码和原码一样,负数时原码第一位不变,其他取反,就是反码。
补码:正数补码,反码以及原码一致,而负数补码是在原有负数的反码上面加1;
比如:
+0 + (-0) = 0000 + 0000 = 0000
+1 + (-1)= 0001 + 1111 = 1 0000 = 0000 (由于这是一个4位二进制数,因此最高位的进位会被丢弃(这称为溢出),最终得到的结果是0000,即0)
+2 + (-1)= 0010 + 1111 = 1 0001 = 0001 (最高位的进位会被丢弃)
2:为什么要用补码
1. 简化计算机运算
统一运算方式:补码使得计算机在进行加法和减法运算时,可以采用统一的加法器来处理,因为补码可以将减法转换为加法。这种特性简化了计算机内部的硬件设计,降低了设计复杂度和成本。
符号位参与运算:在补码表示法中,符号位(最高位)与数值位一起参与运算,这进一步简化了计算机的运算规则,提高了运算效率。
2. 扩大数值表示范围
表示范围更广:相比原码和反码,补码能够表示一个额外的负数(即-128,在8位二进制中)。这是因为补码通过一种巧妙的方式,使得最低位的负数能够用全1来表示,从而扩展了数值的表示范围。
3. 解决0的表示问题
唯一表示0:在原码和反码表示法中,0存在两种表示方式(+0和-0),这在实际应用中可能会引起混淆。而补码通过特定的编码方式,使得0只有一种表示方式(即全0),从而避免了这种混淆。
4. 逻辑完整性
逻辑自洽:补码的设计使得计算机在处理数值时更加逻辑自洽。例如,在补码表示法中,一个整数的补码再求补码,结果等于该整数本身,这种特性使得补码在数值运算和表示上更加严谨和可靠。