作业帮 > 数学 > 作业

请问下列二进制数的补码是怎么计算的?明明是8位,结果前面怎么多了个0?

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:数学作业 时间:2024/08/05 20:22:31
请问下列二进制数的补码是怎么计算的?明明是8位,结果前面怎么多了个0?


请问下列二进制数的补码是怎么计算的?明明是8位,结果前面怎么多了个0?
应该是进位标志位.C 代表 Carry (CY)位.
再问: 这个是代表正负的意思吗?
再答: 应该不是。C 只代表进位(相加后,最高位大于 1 后进位)或者借位(相减后 最高位不够减)。 对于补码,最高位 ∑8 才是符号位。0 代表正,1 代表负。
再问: (1)10110 (2)111010011 (3)1001000 这几个数的补码是多少?
再答: 我仔细核对了一下楼主提供的这个电路,实际上这个不能算作求补码的电路,而是一个求相反数的电路。就以楼主电路中的输入的原码数来说:10101010,最高位 1 表示是负数,后面的 (0101010)B = (42)D也就是说,原码表示的数是十进制数的 -42。因此,求补码的时候,对 42 的各位先求反码:(00101010)B 反= (11010101)B然后将这个反码再加上 1,得到它的补码:(10101010)补 = (11010110)B 但是,楼主的这个电路中,(10101010)B 本身就是一个补码数,它代表的数是十进制的 - 86。而最终由加法器电路得到的结果 (01010110)B = (86)D。所以说楼主的这个电路就是用来求相反数的电路。无论输入数还是输出数都是补码。 正数的补码与原码相同,负数的补码等于各位取反后再加上 1。(10110)补 = (00010110)B1,1101,0011 多了一位。如果当作 16bit 数来处理的话,它就是一个正数。因此它的补码就是它自身。如果 bit8 当作CY 位的话,忽略掉。后面的(101,0011)B = (83)D它的反码:(0101,0011)反 = (1010,1100)B它的补码:(1010,1100)B + 1 = (1010,1101)B(100,1000 )是正数,它的补码还是等于它自身:(0100,1000)B 只有负数求补码比较麻烦。我可以和楼主分享一下求补码的方法:对于 8 位的二进制数,你可以使用 2^8 = (1,0000,0000)B 减去正数,就可以得到它的相反数的补码。比如,第 2 题中的 (83)D = (0101,0011)B,用 (1,0000,0000)B 来减的话,可以直接得到:(1010,1101)B 如果你是求 16 位的补码,你就可以直接用 2^16 减去正数,就可以得到它的相反数的补码了。 本质上,正数与负数相加的话就是等于 0 的。在计算机中,正数与负数的补码相加以后,符号位会向前进位的。因此得到的数就是 2^8 = 256 = (1,0000,0000)B。忽略进位后就是 0 了。这也就是我为什么使用这种快速计算负数补码的原因。