我有一个字符串十六进制值,我需要用 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
and ushort
别名UInt16
类型。为了清楚地了解此类操作,您最好使用显式名称。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)