如何求补码?

作者&投稿:米倪 (若有异议请与网页底部的电邮联系)
~ 原码:

正整数的原码:这个数的二进制,符号位为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位进位或借位时。


白沙黎族自治县13055073467: 怎样求一个数的补码?比如 - 114,请写出具体步骤,谢谢! -
鄞享达吉:[答案] 正数的补码与原码相同,这个就不说了. 负数的补码:符号位为1,其余位为该数绝对值的原码按位取反,然后整个数加1. 求-114的补码 第一步:+114:01110010 第二步:按位取反(1变成0,0变成1),然后加1. 10001101+1 最后结果:10001110

白沙黎族自治县13055073467: - 128的补码是怎么求出来的啊? -
鄞享达吉: 方法一:有公式的:要求x为负数 [-x]补=2的8次方-|-x| 所以-128的补码=256-|-128|=128=80H 方法二:直接由原码求补码 (1)正数的原码=补码 (2)负数:先写出负数绝对值的原码,再求反加一 所以—128的绝对值的原码为80H,求反为0111 1111,再加一为1000 0000,就是80H

白沙黎族自治县13055073467: 补码到底怎么求,据说 补码就是 除符号位 其余各位取反再加1 例如 - 7 的原码 1000 0111 除符号位其余求反 1111 1000再加1就是补码 1111 1001但是汇编语... -
鄞享达吉:[答案] 你求补码的过程是完全正确的.看一下neg的有关规定就清楚了,你可能是输入mov reg/mem,-7了吧?我的理解应当是mov reg/mem,7再neg reg/mem!因为neg的作用是reg/mem←0-reg/mem,若减一个负数的话从数学逻辑说又变回去了,等于没有做.

白沙黎族自治县13055073467: 补码求真值! -
鄞享达吉: 补码是这样计算的: 首位为符号位. 符号位为0表示正数,正数的补码=原码=反码. 符号位为1表示负数,负数的补码等于将符号位后面的位全部取反再加1.另外,一个数的补码的补码等于这个数的原码,所以如果已知一个数的补码,那么对这个补码求一次补码即可得到这个数的原码.前面已经说了,负数的补码等于符号位后面的位全部取反再加1,所以11010101取反(符号位不变)为10101010,再加1,得到10101011,此即为原真值的原码,由此很容易得到真值为:-(32+8+2+1)= -43

白沙黎族自治县13055073467: 算出下列的补码求过程顺便说下负数的补码怎么运算正46 负78 正112 负51 -
鄞享达吉:[答案] 【注】因为题目没有指定字长,我谨以8位字长为例,16位、32位同理,补0就好了. (1)求+46的补码: ①进制转换:+46的二进制形式为+101110 ②转换成原码:10101110 ③因为 正数的补码与起原码相同, 所以 +46的补码为:10101110. (2)求-...

白沙黎族自治县13055073467: 知道一个数,怎么求他的原码和补码?急.比如说 - 11 -
鄞享达吉:[答案] 一个正整数的补码和原码相同 比如10 原码0000000000001010 补码0000000000001010 一个负数的补码求 绝对值取反 再加1 -10 取10的原码0000000000001010 取反 1111111111110101 再加1得 1111111111110110 就这样了

白沙黎族自治县13055073467: 负数的补码怎么求的就比如 - 9 补码是11110111,请问怎么算的 -
鄞享达吉:[答案] 9的源码为00001001,如果是负数的话,补码为最高位置1 ,其余取反也就是11110110,然后在最低位加1即可即11110111

白沙黎族自治县13055073467: 怎样求一个数的补码?比如 - 114,请写出具体步骤,谢谢! -
鄞享达吉: 正数的补码与原码相同,这个就不说了.负数的补码:符号位为1,其余位为该数绝对值的原码按位取反,然后整个数加1. 求-114的补码 第一步:+114:01110010 第二步:按位取反(1变成0,0变成1),然后加1. 10001101+1 最后结果:10001110

白沙黎族自治县13055073467: 补码的补码怎么求?已知X,Y,求[X - Y]补=?X=+24D Y= - 64D[X - Y]补=[X]补+ [ - Y]补=?Y已经是负数了,负Y的补码怎么求???? -
鄞享达吉:[答案] 在进行补码加减运算时,常采用双符号表示,即正数符号用00,负数符号用11表示.已知X=+24D=000011000B,Y=-64D=111000000B,则[X]补=000011000B,[Y]补=111000000B,因为[-Y]补是将[Y]补所有位变反末位加1得到的,所以[-Y]...

白沙黎族自治县13055073467: 如何求一个正数或者负数的原码,反码,补码?比如+5? -
鄞享达吉:[答案] 正数的原码,反码,补码就是它的二进制数 负数原码是它的二进制数 反码是原码各位取反0取反是1,1取反是0 补码就是反码加1 如+5的原码,反码,补码都是1,101 而-5的原码是0,101 反码0,010 补码0,011 正号用1表示 负号用0表示

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网