C# Int64.MinValue的十六进制文字

C# Int64.MinValue的十六进制文字,c#,visual-studio-2010,hex,C#,Visual Studio 2010,Hex,我试图将Int64.MinValue(-0x80000000000000)写为负十六进制,但Visual Studio 2010不允许这样做,因为它假定0x80000000000000必须是一个ulong文本,且无符号数不能为负。有解决办法吗?我注意到在另一个线程中使用了checked关键字,但它并没有解决这个问题。在这种情况下,我真的希望使用十六进制符号而不是十进制符号 有趣的是,十进制记数法不会出现这种情况。这个怎么样 const Int64 test = unchecked((long)0

我试图将Int64.MinValue(-0x80000000000000)写为负十六进制,但Visual Studio 2010不允许这样做,因为它假定0x80000000000000必须是一个ulong文本,且无符号数不能为负。有解决办法吗?我注意到在另一个线程中使用了checked关键字,但它并没有解决这个问题。在这种情况下,我真的希望使用十六进制符号而不是十进制符号

有趣的是,十进制记数法不会出现这种情况。

这个怎么样

const Int64 test = unchecked((long)0x8000000000000000);
Trace.Assert(test == Int64.MinValue);
或者这不是你的意思吗?

这个怎么样

const Int64 test = unchecked((long)0x8000000000000000);
Trace.Assert(test == Int64.MinValue);

或者这不是你的意思吗?

这展示了几种可能的实现方法:

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

这显示了实现此目标的几种可能方法:

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吗(不确定它是否有效,因为你缺少符号位),我不能。这里是确切的错误:运算符“-”不能应用于“ulong”类型的操作数只是出于好奇:将值表示为十六进制文字的具体原因是什么?在我使用逐位运算符的上下文中,十六进制更为合理。您能将结果乘以-1吗(不确定它是否有效,因为缺少符号位)我不能。下面是确切的错误:运算符“-”不能应用于“ulong”类型的操作数只是出于好奇:将值表示为十六进制文字的具体原因是什么?十六进制在我使用位运算符的上下文中更为合理。我目前使用的是十进制表示法,但它看起来不正确。@toplel32-当然,出于好奇,为什么不直接使用
Int64.MinValue
,因为这可能是最容易阅读的方法?为了保持一致性。我正在使用表示单个位的相同方法中的其他文字。我目前使用的是十进制表示法,但它看起来并不正确。@toplel32-当然,出于好奇,为什么不直接使用
Int64.MinValue
,因为这可能是最容易阅读的方法?为了一致性。我在同一个方法中使用了表示单个位的其他文字。是的,这会产生正确的结果。unchecked关键字的确切作用是什么?@toplel32它使编译器不再担心溢出,在本例中这是可以的。是的,这会产生正确的结果。unchecked关键字的确切作用是什么?@toplel32它使编译器不再担心溢出,在本例中这是正常的。