我正在尝试将Int64.MinValue(-0x8000000000000000)写为负十六进制,但Visual Studio 2010不允许我,因为它假定0x8000000000000000必须是ulong文字,并且无符号数不能为负数。这有解决方法吗?我注意到在另一个线程中使用了checked关键字,但它没有解决这个问题。在这种情况下,我真的想在十进制上使用十六进制表示法。
有趣的是,这不会发生十进制表示法。
答案 0 :(得分:3)
这显示了实现它的几种可能方法:
static void Main(string[] args)
{
Int64 minValue = -9223372036854775808;
Int64 minValueViaHex = Int64.Parse("8000000000000000", NumberStyles.AllowHexSpecifier);
Int64 minValueViaHexInline = unchecked((long)0x8000000000000000L);
Console.WriteLine("Decimal match : {0}", Int64.MinValue == minValue);
Console.WriteLine("Via Hex match : {0}", Int64.MinValue == minValueViaHex);
Console.WriteLine("Via Hex inline: {0}", Int64.MinValue == minValueViaHexInline);
}
输出:
Decimal match : True
Via Hex match : True
Via Hex inline: True
答案 1 :(得分:1)
这个怎么样?
const Int64 test = unchecked((long)0x8000000000000000);
Trace.Assert(test == Int64.MinValue);
或者那不是你的意思吗?