[关于补码]fffffff8为什么是-8?解决思路
[关于补码]fffffff8为什么是-8?
1.正向的计算网上书上都有很多了,而且大多是十进制的,没有十六进制的,但是反过来怎么推?就是已知fffffff8的时候怎么推出它是-8?
2.有没有专门的十六进制补码转十进制的工具?
------解决方案--------------------
1.16进制-> 10进制方法:首先判断其最高位,若大于等于8则该数为负,接着将其求补,因为根据运算法则,绝对值相同的数正负数互补,故求补后该16进制数为正,接着将其化为对应的10进制形式(此时是10进制正书),最后因为之前判断出其为负,在该10进制数前加上负号即可。
2.尚未发现,不过知道了方法,可以自己写一个。
------解决方案--------------------
一切源于补码的定义,n位二进制数的补码为:2^n+x (0> x> -2^(n-1))
x=-8 即-0x00000008
x(补)=0x100000000-0x00000008=0xfffffff8
求原来的x只要再对x的补码求补,它们是互为补码关系
------解决方案--------------------
如一楼所说:
有符号十六进制数到十进制数的转换, 用以下步骤可以将有符号十六进制数转换为十进制数:
1:如果原十六进制整数是负数,那么首先求其补码,否则保持不变.
2:将上一步的结果转换为十进制数,如果原数为负数,那么在十进制整数的开头加一负号.
(可以通过十六进制整数的最高位来判断其正或负,如果最高位> =8,那么其为负,如果最高位 <=7,那么其为正)
初学不对之处请原谅!!!
1.正向的计算网上书上都有很多了,而且大多是十进制的,没有十六进制的,但是反过来怎么推?就是已知fffffff8的时候怎么推出它是-8?
2.有没有专门的十六进制补码转十进制的工具?
------解决方案--------------------
1.16进制-> 10进制方法:首先判断其最高位,若大于等于8则该数为负,接着将其求补,因为根据运算法则,绝对值相同的数正负数互补,故求补后该16进制数为正,接着将其化为对应的10进制形式(此时是10进制正书),最后因为之前判断出其为负,在该10进制数前加上负号即可。
2.尚未发现,不过知道了方法,可以自己写一个。
------解决方案--------------------
一切源于补码的定义,n位二进制数的补码为:2^n+x (0> x> -2^(n-1))
x=-8 即-0x00000008
x(补)=0x100000000-0x00000008=0xfffffff8
求原来的x只要再对x的补码求补,它们是互为补码关系
------解决方案--------------------
如一楼所说:
有符号十六进制数到十进制数的转换, 用以下步骤可以将有符号十六进制数转换为十进制数:
1:如果原十六进制整数是负数,那么首先求其补码,否则保持不变.
2:将上一步的结果转换为十进制数,如果原数为负数,那么在十进制整数的开头加一负号.
(可以通过十六进制整数的最高位来判断其正或负,如果最高位> =8,那么其为负,如果最高位 <=7,那么其为正)
初学不对之处请原谅!!!