原码反码补码

本文介绍了计算机中二进制表示数值的方式,包括原码、反码和补码的概念。原码直接表示符号,正数与负数的机器数形式不同;反码是正数不变,负数除符号位外其他位取反;补码则是负数在原码基础上取反加1,用于简化计算。补码使得计算机可以直接进行二进制运算,而无需关注符号位。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

 

 


提示:以下是本篇文章正文内容,下面案例可供参考

一、原码

1.机器数

一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。

比如:十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。那么,这里的 00000011 和 10000011 就是机器数。

2.真值

因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1

3.原码

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:

[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:[1111 1111 , 0111 1111]
即[-127 , 127]。原码是人脑最容易理解和计算的表示方式,跟机器数是一样的。


二、反码

反码的表示方法是:正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。

[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反

可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.


三、补码

对补码的解释一般是"对负数的绝对值按位取反再+1"。

 

补码的表示方法是:

正数的补码就是其本身

负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补

对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值。

1.在不考虑符号位的情况下

在没有符号位的情况下,负数无法用原码表示。

对于补码,更本质的解释是:对于负数-x,"若数据类型为n个二进制位,则补码为2^n-x" 。也就是说,这个补码其实就是-x,只不过是对2^n取模之后的-x 。这样就能理解,为什么减去一个数等于加上这个数的补码,因为补码无非是这个数在模意义下的相反数。比如在四位的情况下,-1 对2^4取模为15,用二进制表示即为 1111 ,列举几种情况:

1.计算的结果为正,如3 - 2,用补码表示为:0011 + 1110 ,结果为 1 0001,即为2^4 + 1,溢出了一位,不考虑,即结果为1。

2.计算的结果为负,如2-3,用补码表示为:0010 + 1101,结果为 1111 ,即为2^4-1,即原值为-1。

2.在考虑符号位的情况下

用四位可以表示0000~1111,最高位为符号位,对于一个负数-2,原码表示为1010,补码表示为1110,可以发现和不考虑符号位的补码是一样的,1-2 用原码表示为 0001 + 1010,用补码表示为0001 + 1110,结果为1111(补),即2^4-1,那么原值为-1,用原码表示为1001。

总结

其实补码就是一种映射,将负数映射到最高位为1的区间,因为对于负数来说,负数和映射之后的结果的性质是一样的,比如在四位的情况下,1001的补码为1111,2-1 补码结果为1 0001,去掉溢出即为1,1-2 补码结果为 1111,也就是补码的-1。

最重要的是,计算机可以直接使用补码进行二进制运算,不需要在意符号位。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值