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