为什么FF00H有符号数转化为十进制是-256?

如题所述

FF00H 这个是补码,正数的补码是它本身,负数的补码是它的反码加1。补码:1111111100000000 补码转化为反码就减一,所以他的反码为1111111011111111,再把反码转化为原码,负数反码等于原码符号位(最高位)不变,其他位取反,求出原码为1000000100000000,再转化为十进制就是-256
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-12-01
有符号数,最高位是符号位,如果是1,就是负数。负数的表示法,是绝对值各位求反,再加1.反过来求原数,先减1,再各位求反(1变0,0变1),得到绝对值,前面加符合。
FF00H=1111,1111,0000,0000B
减1得
1111,1110,1111,1111B
各位反:
0000,0001,0000,0000B
=2^8=256
所以原数是-256。追答

这样规定的好处是,做加减法运算,不需要判断正负。

比如,以8位二进制数为例:
5,0001,0001B
-2,0000,0010B(2)-〉1111,1101B(反)-〉1111,1110B(加1),-2的二进制表示(补码)

写错了,前面5应该是17
17十(-2)
0001,0001B
1111,1110B
-----------
0000,1111B
=15D
直接逐位相加即可。

如果简单高位置1表示负数,做加法前,要先取出各个数的最高位,判断是不是1,是1,是负数,加其实是减,调用减法命令做加法。

就很麻烦,很慢。

(-2)-17:
1111,1110
0001,0001
----------
1110,1101B,逐位减。
对应数,
1110,1101-1=1110,1100
逐位反:0001,0011B=16十2十1=19,结果-19,直接得到,无需计算前判断正负。

第2个回答  2021-12-03
FF00H化为二进制为1111111100000000
若该数为有符号数则最高位(左侧第1位)为符号位,对符号位来说0表示正数,1表示负数。
所以上述二进制数化为真值为:-111111100000000
化为十进制为:-(2∧14+2∧13+2∧12+2∧11+2∧10十2∧9+2∧8)=-(1024X16十1024×8十1024×4十1024×2十1024+512+256)=-(16384+8192+4096+2048+1024+512+256)=-32512
第3个回答  2022-08-09
你可以用反证法。
第4个回答  2021-12-02
最佳答案:就你这个来讲吧。先是后面的0+0=0没有进位。再就是0+0=0通样没有进位,后面就是0+F=F仍然没有进位,2+F=11。估计你...
相似回答