如何获得一个数字的签名补充?

时间:2014-07-11 22:13:23

标签: c binary twos-complement

我想在C中找到一个数字的有符号值。所以,如果我有一个数字,请说10,二进制(8位),它将是0000 0110.我如何得到有符号数在2的补充1111 1110,即-2。使用简单的按位运算,移位,掩码,我该如何进行这种转换?我已经被困在这几个小时了。

2 个答案:

答案 0 :(得分:0)

如果我们已经有正数n的二进制表示,则-n的按位表示为~n+1,换句话说,1加上按位否定正数。

答案 1 :(得分:0)

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

  

我想在C中找到一个数字的有符号值。所以,如果我有一个数字,请说10,二进制(8位),它将是0000 0110.我如何得到有符号数在2的补充1111 1110中,这是-2。

你很困惑。 0000 0110的8位二进制补码是1111 1010(如果解释为带符号,则为-10,如果解释为无符号,则为6)。重点是位模式及其(无符号)n位二进制补码加起来为2 ^ n。

  

使用简单的按位运算,移位,掩码,我该如何进行这种转换?我已经被困在这几个小时了。

下面:

unsigned char x = 0x0a;
unsigned char twos_complement = (~x) + 1;