码迷,mamicode.com
首页 > 其他好文 > 详细

原码、反码、补码

时间:2020-01-06 19:40:10      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:转换   补码   style   正数   span   十进制   错误   基础   取值   

一、概念讲解

机器数:

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

例如:+2二进制数:0(符号位)000 0010;-2二进制数:1(符号位)000 0010。

其中,0000 0010和1000 0010就是机器数。

真值:

因为第一位是符号位,所以机器数的形式值就不等于真正的数值。

例如,上面1000 0010,其中,最高位1代表负数,而其真正的数值是-2而不是242(1000 0010转换为十进制为242)。

所以,为区别起见,将带符号的机器数对应的真正数值称为机器数的真值。

例如:0000 0010 = +000 0010 = +2;1000 0010 = -000 0010 = -2。

二、具体内容

原码:

原码就是符号位加上真值的绝对值。

 

+2 = 0000 0010[原]
-2 = 1000 0010[原]

 

取值范围。

[1111 1111, 0111 1111]   ==>   [-127, 127]

反码:

反码就是,正数的反码是其原码本身,负数的反码是原码基础上,符号位不变,其余位取反。

 

+2 = 0000 0010[原] = 0000 0010[反]-2 = 1000 0010[原] = 1111 1101[反]

 

取值范围。

 

[1111 1111, 0111 1111]   ==>   [-127, 127]

 

补码:

补码就是,正数的补码是其原码本身,负数的补码是反码基础上,+1。

 

+2 = 0000 0010[原] = 0000 0010[反] = 0000 0010[补]-2 = 1000 0010[原] = 1111 1101[反] = 1111 1110[补]

 

取值范围。

[1000 0000, 0111 1111]   ==>   [-128, 127]

为什么会用到反码和补码?

//原码。
1 + (-1) = 0000 0001[原] + 1000 0001[原] = 1000 0010[原] = -2(结果错误)
//反码。
1 + (-1) = 0000 0001[反] + 1111 1110[反] = 1111 1111[反] = 1000 0000[原] = -0(结果正确,现有+0[0000 0000]、-0[10000 0000],但是0无正负之分)
//补码。
-1 + (-127) = 1111 1111[补] + 1000 0001[补] = 1000 0000[补] =  = -128

原码、反码、补码

标签:转换   补码   style   正数   span   十进制   错误   基础   取值   

原文地址:https://www.cnblogs.com/DingALing/p/12157903.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!