表示2的补码中的hex值

我有一个字符串hex值,我需要用2的补码来表达它。

string hx = "FF00"; 

我做的是,将其转换为二进制:

  string h = Convert.ToString(Convert.ToInt32(hx, 16), 2 ); 

然后反转它,但我不能使用NOT运算符。

是否有任何简短的方法来反转位然后加1(2的补码运算)?

答案可能取决于值的位宽是否对您很重要。

简短的回答是:

 string hx = "FF00"; uint intVal = Convert.ToUInt32(hx, 16); // intVal == 65280 uint twosComp = ~v + 1; // twosComp == 4294902016 string h = string.Format("{0:X}", twosComp); // h == "FFFF0100" 

然后, h的值是“FFFF0100”,它是hx的32位2的补码。 如果您期望’100’,那么您需要使用16位计算:

 string hx = "FF00"; ushort intVal = Convert.ToUInt16(hx, 16); // intVal = 65280 ushort twosComp = (ushort)(~v + 1); // twosComp = 256 string h = string.Format("{0:X}", twosComp); // h = "100" 

请记住, uintUInt32的别名, ushortUInt16类型的别名。 为了清楚这种类型的操作,您最好使用显式名称。

两个complment非常简单:

 int value = 100; value = ~value // NOT value = value + 1; //Now value is -100 

请记住,两个补充系统需要反转并添加加1。

hex:

 int value = 0x45; value = ~value // NOT value = value + 1;