补码计算诺某整数的16位补码为FFFFH,则该数的十进制为多少 我怎么感觉-1和65535都符合要求 可是答案却是-1
1个回答

首先,叫你计算补码,最好的方式不是将这个16进制的数转换为10进制,而是将其转换为2进制.

回到这个题目,正确的想法应该是FFFF(H)=1111,1111,1111,1111(B),也就是将其转换为2进制考虑问题.

这个2进制数的补码首位是1,说明这个数是个负数.(首位是0是非负数,首位是1则是负数)

你再看看补码的定义,正数补码是它本身,负数补码就是其反码+1.

那回到原题,这个数的反码就是:1111,1111,1111,1111(B)-1=1111,1111,1111,1110(B).

根据反码定义,你不难得出数的原码是1000,0000,0000,0001(B)=-1.

(首位符号位不变,其它位取反)

同样的方法,根据原码,反码,补码的定义,你也可以计算-128的补码.但是你没说要求的是多少位补码,我当求8位补码来考虑了.

第一步:转换为2进制:-128转化为8位二进制数为1111,1111(B)

第二步:求其反码:1000,0000(B)

第三步:求补码:就是反码+1=1000,0001(B)=-1

若是求16位补码:则同理:其2进制补码为1111,1111,1000,0001(B),我就不转换10进制了,有需要可以用windows自带的计算器,用“科学型”进行进制转换.

这种题目,对于刚学习的来说,不能急,关键看定义,通过定义来计算.定义都是用2进制来考虑的,你为什么要想换成10进制去算?对吧?