表示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"
请记住, uint
是UInt32
的别名, ushort
是UInt16
类型的别名。 为了清楚这种类型的操作,您最好使用显式名称。
两个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;