2012-04-11 94 views
0

我一直在寻找这个问题,但似乎无法找到它。如果我在GDB反汇编代码,如何将0xfffffff4转换为-0xc(我在网上找到这些值)转换内存地址

我正试图实现它在Perl中的工作方式。我是用十六进制,但我不知道在做什么IM:

print hex(shift); 
+1

它被称为二进制补码:http://en.wikipedia.org/wiki/Two%27s_complement – 2012-04-11 23:34:37

回答

1

它补http://en.wikipedia.org/wiki/Two%27s_complement

所以,你要做的就是反转每一位,然后加1

例如0xffffff04将成为0x000000fb + 1 = 0x000000fc

编辑:和改回来,你做同样的事情:使0x000000fc将成为0xffffff03 + 1 = 0xffffff04

1

在32位寄存器或存储器访问中,0xfffffff4-0xc(或-12)—假设现代CPU架构,所有这些都使用二进制补码。