原码,补码和反码

为什么要了解这三种东西?

因为他和数据存储有关。

 

整数的二进制表示的三种形式:原码,补码和反码。

有符号的整数(signed int)的三种表示方法里面有符号位和数值位两部分,2进制序列里面,最高位是符号位,剩下的是数值位置。

符号位里面0是"正数",1是"负数"

①正整数:三种码一模一样

②负整数:三种码完全不一样

(1)原码:直接把数字换成二进制表示就是原码

(2)反码:顾名思义,把除了符号位数字其他全部反过来表示就是反码

(3)补码:反码+1就是补码

 

Eg1:数字10,在整型存储中占四个字节(32bit)所以其原码为:

00000000000000000000000000001010

其中,第一个bit表示这是正数,后面31为表示这是个10。

由于它是正整数,所以它原码反码补码均是这个东西表示。

Eg2:数字-10,其原码为:

10000000000000000000000000001010

那么它的反码:

11111111111111111111111111110101

那么它的补码:

11111111111111111111111111110110

 

整型在数据存放内存里面用的是补码:

使用补码可以将符号位和数值与统一处理。同时加减法可以统一处理(CPU只有加法器)。除此之外,补码和原码转换的运算过程相同,不需要其他硬件电路。

你可能感兴趣的:(c语言)