1. > 生活百科 >

原码反码补码计算 原码反码补码计算过程

计算机原码反码补码怎么算

计算机中,并没有原码和反码,只是使用补码,代表正负数。

使用补码的意义:可以把减法或负数,转换为加法运算。从而简化计算机的硬件。

------------

比如钟表,时针转一圈,周期是 12 小时。

倒拨 3 小时,可以用正拨 9 小时代替。

9,就称为-3 的补数。

计算方法:12-3 = 9。

对于分针,倒拨 X 分,就可以用正拨 60-X 代替。

------------

如果,限定了两位十进制数 (0~99),周期就是 100。

原码反码补码计算 原码反码补码计算过程原码反码补码计算 原码反码补码计算过程


那么,减一,就可以用 +99 代替。

24-1 = 23

24 + 99 = (1) 23

忽略进位,只取两位数,这两种算法,结果就是相同的。

于是,99 就是 -1 的补数。

其它负数的补数,大家可以自己求!

求出了负数的补数,就可用加法,代替减法了。

------------

计算机中使用二进制,补数,就改称为【补码】。

常用的八位二进制是:0000 0000~1111 1111。

它们代表了十进制:0~255,周期就是 256。

那么,-1,就可以用255=1111 1111代替。

所以:-1 的补码,就是 1111 1111 = 255。

同理:-2 的补码,就是 1111 1110 = 254。

继续:-3的补码,就是 1111 1101 = 253。

。。。

最后:-128,补码是 1000 0000 = 128。

计算公式:负数的补码=256+这个负数。

正数,直接运算即可,不需要求补码。

 也可以说,正数本身就是补码。

------------

补码的应用如: 7-3 = 4。

用补码的计算过程如下:

7 的补码=0000 0111

 -3的补码=1111 1101

--相加-------------

 得:(1)0000 0100= 4 的补码

舍弃进位,只保留八位,作为结果即可。

这就是:使用补码,加法就代替了减法。

所以,在计算机中,有一个加法器,就够用了。

原码和反码,都没有这种功能。

------------

原码和反码,毫无用处。计算机中,根本就没有它们。

原码、反码的补码怎么求?

求负数的补码,通常都是说:先求原码、再取反加一。

但是,原码,是有缺陷的。

因为,天下只有一个零。而在原码中,却编造了两个码:+0、-0。

所以,八位原码的表示范围,只能是:-127~+127。

而在八位的补码中,只有一个零,所以就多出一个:-128。

用“取反加一”的方法,求-0 和-128 的补码,这就尴尬了!

求-0 的补码,得出的是 0000 0000。

符号位竟然是 0 !  难道,-0,是正数吗?

求-128 的补码,更是无处下嘴。

原码反码补码计算 原码反码补码计算过程原码反码补码计算 原码反码补码计算过程


其实,取反加一,并没有什么道理。也可以说,这是错误的。

---------------------

补码,其实,是一个“代替负数”的正数。

使用了补码之后,在计算机中,就没有负数了。

同样,在计算机中,也就没有减法运算了。

利用补码,就是把加减法,统一为加法运算。

使用补码的目的,就是简化计算机的硬件。

---------------------

补码(一个正数),怎么就能代替负数呢?

你看时针,倒拨 3 小时,可以用正拨 9 小时代替。

你看三角函数,-π/2、+3π/2,两者函数值也是相等的。

如果限定,只用 2 位 10 进制数,那么有:

 25 - 1 = 24

 25 + 99 = (一百) 24

如果忽略进位一百(10^2),+99 就和-1 等效。

上面这些正数,就是负数的补数。

求补数的计算公式:补数(即正数) = 负数 + 周期。

而正数,不可变换,必须直接参加运算。

所以,正数,就没有补数。

---------------------

计算机用二进制,就称为补码了。

8 位 2 进制,周期是:2^8 = 256。

-1 的补码,就是:-1 + 256 = 255 = 1111 1111(二进制)。

-2 的补码,是:254 = 1111 1110。

。。。

-128 的补码是:128 = 1000 0000。

此时,楼主的问题,就解决了。

补码的定义式:

 X >= 0, [ X ]补 = X;正数不用变换。

 X < 0,  [ X ]补 = X + 2^n。 n 是补码的位数。

按此公式求补码,是极为简便的,而且还能理解补码的意义。

---------------------

那么,就不要学“原码反码取反加一符号位不变”了。

老外数学不好,也只能摆弄哪些“隔,路”的花样。

补码.原码.反码怎么运算的啊.详细一点

以8位机器码为例:

对正数而言,原码、反码、补码都是相同的。

十进制数7,

都是:

00000111

对于-7

原码,只是最高位用1表示负数,就是:

10000111

反码,就是在原码的上,除最高位(符号位)外,按位取反就行:

11111000

补码,就是在反码的基础上,最低位加1:

11111001

原码、补码、反码之间是怎样转换的?

一、正整数的原码、反码、补码完全一样,即符号位固定为0,数值位相同。

二、负整数的符号位固定为1,由原码变为补码时,规则如下:

1、原码符号位1不变,整数的每一位二进制数位求反,得到反码。

2、反码符号位1不变,反码数值位最低位加1,得到补码。

方法:

(1)正整数的原码,反码和补码计算。【符号位为0,原码=反码=补码】

(2)负整数的原码,反码和补码计算,先求原码,再求反码,最后求补码。

(3)根据补码求真值,一般使用图中的公式计算,正整数符号为+,负整数符号为-,通常完成补码求真后,可以按步骤1、2简单的逆推一下,看结果是否正确。

扩展资料:

补码的表示方法:

模的概念:把一个计量单位称之为模或模数。例如,时钟是以12 进制进行计数循环的,即以12为模。在时钟上,时针加上(正拨)12的整数位或减去(反拨)12的整数位,时针的位置不变。14点钟在舍去模12后,成为(下午)2点钟(14=14-12=2)。

从0点出发逆时针拨10格即减去10小时,也可看成从0点出发顺时针拨2格(加上2小时),即2点(0-10=-10=-10+12=2)。因此,在模12的前提下,-10可映射为+2。由此可见,对于一个模数为12的循环系统来说,加2和减10的效果是一样的。

因此,在以12为模的系统中,凡是减10的运算都可以用加2来代替,这就把减法问题转化成加法问题了(注:计算机的硬件结构中只有加法器,所以大部分的运算都必须最终转换为加法)。10和2对模12而言互为补数。

同理,计算机的运算部件与寄存器都有一定字长的限制(假设字长为8),因此它的运算也是一种模运算。当计数器计满8位也就是256个数后会产生溢出,又从头开始计数。产生溢出的量就是计数器的模,显然,8位 二进制数,它的模数为2^8=256。在计算中,两个互补的数称为“补码”。

补码.原码.反码怎么运算的啊.详细一点

在计算机中,使用的是二进制。

八个二进制位,称为一个字节。

计数范围是:0000 0000~1111 1111。

对应十进制:0 ~ 255,共有 256 个数字。

计数周期是:2^8 = 256。

在计算机中,并没有负数。

计算机中这些数字,都属于自然数,即“零和正数”。

但是,实际上,正数,也能当负数用的。

你看 2 位 10 进制数的计算:

 25 - 1 = 24

 25 + 99 = (一百) 24

如果你不舍弃进位,结果就 124,+99 还是 99。

如果,舍弃超出 2 位数的进位,+99 就相当于-1 。

这时的正数,就称为“负数的补数”。

算法是:补数=负数+周期 (10^n),n 是补数的位数。

-------------------------

在计算机中,255 = 1111 1111,就相当于-1。

示例: 0000 0001 = 1

+ 1111 1111 = 255

--------------

(1) 0000 0000 = 0

原码反码补码计算 原码反码补码计算过程原码反码补码计算 原码反码补码计算过程


舍弃了进位 1,这算式,就是:+1 -1 = 0。

如果保留进位,这就是: 1 + 255 = 256。

-------------------------

同理,254 = 1111 1110,就相当于-2。

 。。。

只要你舍弃进位,这些正数,就可以代表负数,参加运算。

这些正数,就称为:负数的补码。

补码 = 负数 + 周期(2^n),n 是补码的位数。

-------------------------

利用补码,可以把减法,转换成加法。

从而就能简化计算机的硬件。

原码和反码,都没有这种功能。

所以,在计算机中,并没有原码和反码。

符号位原码反码取反加一,这些,都是“鸡肋”。

学习这个,花费不少时间,还是弄不懂“补码的意义”。

老外数学不好,也就只能整这些骚操作了。

原码反码补码计算口诀

一:原码,反码,补码与加减乘除运算

1:原码,反码与补码

正数的原码,反码,补码都一至.

负数原码为绝对值二进制最高位取1, 负数的反码是原码(符号位除外)按位取反, 负数补码是反码+1

如9的原码,反码,补码都是 00000000 00000000 00000000 00001001

-9 原码 10000000 00000000 00000000 00001001

-9的反码 11111111 11111111 11111111 11110110

-9的补码 11111111 11111111 11111111 11110111

2:加法运算(与十进制类似例如6+9)

6的二进制 00000000 00000000 00000000 00000110

9的二进制 00000000 00000000 00000000 00001001

相加结果 00000000 00000000 00000000 00001111 转成十进制就是15

3:减法运算,减法其实就是将减的数转成负数取补码相加,例如6-9

正6的二进制 00000000 00000000 00000000 00000110

-9的二进制(补码) 11111111 11111111 11111111 11110111

相加结果 11111111 11111111 11111111 11111101 // 这个数就是-3的二进制

减1成反码 11111111...11111100 取反 10000000 ... 00000011 就是-3的原码喽

4:乘法运算(通过左移化解成加法运算)

十进制中例如140 * 121 = 140 *(1 * 10^0 +2 * 10^1+1 * 10^2) = 140+2800+14000 = 16940,二进制也是一样,

算9 * 6, 6的二进制110, 即 9 * (0 * 2^0 + 1 * 2^1 + 1 * 2^2)位数为0的都等于0,分解出来就是 0 + (9 <<1) + (9<<2)

9的二进制1001 上面分解就等于 0+10010+100100 = 110110 十进制就是54

5:除法(与十进制除法相似从高往低)

如73 / 5 , 73二进制1001001 , 5二进制101

从第一位 1 < 101 结果为0, 余1

到第二位1 0 <101结果为0,余10

到第三位 10 0 < 101 结果为0余100

到第四位 100 1 > 101 结果为1, 余为1001-101 = 100,

到第五位 100 0 > 101结果为1 余为1000 -101 = 11

到第六位11 0 > 101 结果为1 余为110 -101 = 1

到第七位 1 1 < 101 结果为0 余为 11

合起来结果就是 0001110 ,余为11 转十进制就是14余3

二:常用位运算技巧

1:左移 << 与 右移>>

左移<<各二进位全部左移若干位,高位丢弃,低位补0, 右移>>各二进位全部右移若干位,对无符号数,高位补0, 有符号时会补上符号位,在JAVA中若无符号右移为>>>,符号位补0

左移n位即二进制右边补了n个0, 相当乘于2^n, 右移n位相当除2^n, 最常见 除2的操作 num >> 1 , 取颜色值

例如求int最小值,最大值

例如颠倒二进制位 00000000 00000000 10000000 10001110 变成01110001 00000001 00000000 00000000

2:~ 取反 0变1, 1变0

如上求最大值最小值,最大值取反即为最小值,最小值取反即为最大值

10000000 最小值 取反 01111111即为最大值

3:&与运算 两个都为1时结果为1

计算机源码,反码,补码之间怎么计算?

1、正整数的原码、反码、补码完全一样,即符号位固定为0,数值位相同。

2、负整数的符号位固定为1,由原码变为补码时,规则如下:原码符号位1不变,整数的每一位二进制数位求反,得到反码;反码符号位1不变,反码数值位最低位加1,得到补码。

3、例如正整数的原码为01110110,则反码和补码也为01110110;负整数的原码为11110110,反码为10001001,补码为11110111。

拓展资料:

1、反码是数值存储的一种,多应用于系统环境设置,如linux平台的目录和文件的默认权限的设置umask,就是使用反码原理。在计算机内,定点数有3种表示法:原码、反码和补码。

2、在计算机系统中,数值一律用补码来表示(存储)。 主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补 码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, website.service08@gmail.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息