二进制原码、反码、补码运算及标志位

 我来答
机器1718
2022-07-26 · TA获得超过6841个赞
知道小有建树答主
回答量:2805
采纳率:99%
帮助的人:162万
展开全部
原码:

正整数的原码:这个数的二进制,符号位为0;正整数的原码=补码=反码

例1:+66

66的二进制:1000010,所以+66的原码: 0 1000010 =补码: 0 1000010=反码: 0 1000010

负整数的原码:仍是这个数的二进制,符号位为1;负整数的原码、反码、补码计算:先求原码,再求反码,最后求补码;

原码转换为反码:符号位不变,数值位按位取反;

原码转换为补码:符号位不变,数值位按位取反,末尾在+1;

例2:-66

66的二进制:1000010,所以-66的原码:1 1000010  补码:1 0111101 反码:1 0111110

二、二进制原码、反码、补码的加减运算及标志位

1.补码加减基本公式

加法:

整数 [A]补+[B]补=[A+B]补 (mod 2n+1)

小数 [A]补+[B]补=[A+B]补 (mod 2)jianfa

减法:

整数 [A-B]补=[A]补+[-B]补 (mod 2n+1)

小数 [A-B]补=[A]补+[-B]补 (mod 2)

2.标志位

CF(Carry Flag) :   进为标志位。主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。在8位二进制中,如果计算的结果超过 [0,255] 的范围,就有进位,CF就被置为1,如果结果再 [-128,127] 范围内,就是没有进位CF被置为0。

OF(Overflow Flag) :溢出。用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。在8位二进制中,如果一个运算的结果最终超过 [-128,127] 无论是大于127还是小于-128就被认为是溢出,OF被置为1,如果结果在 [-128,127] 就认为没溢出OF被置为0。

SF(Sign Flag) :符号标志。用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1。

ZF(Zero Flag) :零标志。用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。

PF(Parity Flag) :奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。

AF(Auxiliary Carry Flag) :辅助进位标志。在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:(1)、在字操作时,发生低字节向高字节进位或借位时;(2)、在字节操作时,发生低4位向高4位进位或借位时。
做而论道
高能答主

2023-03-16 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部

在计算机系统中,数值,一律采用补码表示和存储。

原码和反码,计算机都是不存在的。

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

使用补码之后,计算机中就没有负数了,也就没有减法运算了。

那么,计算机只需要一个加法器,就可以走遍天下了。

为什么使用补码?

  就是为了简化计算机的硬件。

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

补码(也就是正数),怎么就能代表负数呢?

其实,道理也很简单。根源就是“计数系统的周期性”。

你看 2 位 10 进制数吧:

  25 - 1 = 24

  25 + 99 = (一百) 24

进位是 10^2 = 100,这也是 2 位数的计数周期。

这个进位,显然不在 2 位数之中。

如果你只取 2 位数,+99 和-1 的作用,就是相同的。

就是说,只要舍弃了进位,正数,就可以代替负数。

这个正数,就是“负数的补数”。

求补数的公式: 补数 = 负数 + 周期 (10^n)。

n 是补数的位数。

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

在三角函数中,大家都知道,周期是 2π。

那么:

  -π/2+3π/2,这两个角度,也是等效的。

负角度,和正角度,要怎么变换呢? 

也是用同样的公式: 正角度 = 负角度 + 周期(2π)。

这种转换公式,在计算机中,也可以使用。

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

计算机用二进制,计算机大佬就把“补数”改称为“补码”。

本质上,并没有什么变化,也就是为了标新立异吧。

8 位 2 进制是:0000 0000~1111 1111 (十进制 255)。

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

此时,-1 就可以用 255  (1111 1111)  代替。

同理,-2 的补码就是 254 (1111 1110)。

。。。

正数,本身就是正数,必须直接参加运算,不许再作任何变换。

所以,正数,根本就没有补数(补码)。

由此,你就可以推出补码定义式:

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

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

以上就是“求补码的正规做法”,与“原码反码符号位”毫无关系。

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

用补码计算 5 - 7 = -2。

列竖式如下:

     5  = 0000 0101

 -7 的补码  = 1111 1001

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

   得: (1)   1111 1110   = -2 的补码

舍弃进位,只取 8 位,结果就是正确的。

这就说明了,借助于补码,就可以用加法,实现减法运算。

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

所以,在计算机中,根本就不使用原码和反码。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沙里波特
2024-11-04 · TA获得超过5251个赞
知道大有可为答主
回答量:1.1万
采纳率:95%
帮助的人:641万
展开全部

想要了解补码,还得从小学说起。

大概是在小学二年级吧,就学过进位了。

两位十进制数是:0 ~ 99。

那么有:27 + 99 = (一百) 26

也可以:27 - 1 = 26

如果你忽略进位,依然保持两位数,这两种算法的功能,就是完全相同的。

如果在计算机中舍弃进位:

●  负数,就能用正数(即补码)代替;

●  用加法,也就实现了减法运算。

所谓的补码,就是一个【代替负数的正数】。

补码的来源,就是【舍弃进位】!

----------

两位十进制数,舍弃进位,就是减去一百。

因此,+99、-100,当然就是-1 了。

还有,+98,它就是-2。

·

八位二进制数:0000 0000 ~ 1111 1111。

也就是十进制:0 ~ 255。

如果出现进位:2^8 = 256。

此时,+255 (1111 1111)、再舍弃进位,也就是-1 了。

同理,+254 (1111 1110),也就是-2。

。。。

以上这些正数,就“计算机专家发明的补码”了。

小二的知识点,也能如此装B!

你说可笑不?

而原本就是正数,当然就不用再用别的正数来代替了。

也可以说:零和正数的补码,就是它自己。

----------

补码的来源:就是【舍弃进位】!

所谓的:机器数真值符号位原码反码取反加一,都是忽悠!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式