二进制补码、原码、反码

1. 二进制补码的概念

在计算机中,二进制补码是一种表示有符号整数的编码方式。对于一个固定位数(如8位、16位、32位等)的二进制数,它既能表示正数,也能表示负数。

正数的补码与原码相同。例如,对于8位二进制数,+5的原码和补码都是00000101。

负数的补码计算方法是:先写出该负数绝对值的原码,然后按位取反(0变为1,1变为0),最后加1。例如,-5的绝对值5的原码是00000101,按位取反得到11111010,再加1得到11111011,这就是 -5的补码。

2. 二进制补码的作用

简化硬件电路:计算机中的加法器电路可以同时处理无符号数和有符号数的加法运算,只需要使用一套电路结构。因为在补码表示下,减法可以转换为加法操作。例如,计算5+(-3),在补码中可以表示为5的补码(00000101)加上-3的补码(11111101),结果为00000010,即2。

统一的运算规则:无论是正数还是负数,都可以使用相同的加法和移位等运算规则。在进行有符号数的算术运算时,使用补码可以直接按照无符号数的运算规则进行,然后根据结果的符号位判断最终结果的正负。

3. 补码与原码、反码的关系

原码:原码是一种直观的二进制表示方法,最高位为符号位(0表示正数,1表示负数),其余位表示数值的绝对值。例如,+5的原码是00000101,-5的原码是10000101。原码的缺点是在进行减法运算时,需要根据符号位判断是做加法还是减法,并且还需要考虑符号位的处理,电路实现较为复杂。

反码:正数的反码与原码相同,负数的反码是在原码的基础上,除符号位外,其余各位按位取反。例如,+5的反码是00000101,-5的原码是10000101,反码是11111010。反码在运算时也存在一些问题,例如0有正0(00000000)和负0(11111111)两种表示方式,不够简洁。

补码是在反码的基础上加1得到的,它解决了原码和反码在运算中的一些问题,成为计算机中表示有符号整数的主要方式。

4. 补码的表示范围

对于n位的二进制补码表示的有符号整数,其表示范围是(-2^{n - 1})到(2^{n - 1}-1)。例如,对于8位二进制补码,范围是 -128(10000000)到127(01111111)。

C++编程语言基础

二进制补码、原码、反码