将负十六进制文字值指定为long

时间:2011-08-12 09:22:12

标签: c# literals

在VB中,以下分配具有负值:

Dim a As Long = &HEFCDAB89
Dim b As Long = &H98BADCFE

在C#中分配相同的十六进制值不会产生相同的值:

long a = 0xEFCDAB89;
long b = 0x98BADCFE;

如何在C#中分配负十六进制值,就像在VB中一样?

2 个答案:

答案 0 :(得分:1)

使用L and UL literals

long b = 0xEFCDAB89L; //signed long
long c = (long)0x98BADCFEUL; //unsigned long

答案 1 :(得分:0)

我不知道告诉编译器你想要指定负十六进制文字的任何技巧,我不确定这是否真的可行。我相信您唯一的选择是将ulong字面值转换为long。它必须在未经检查的环境中完成。它仍然是编译时已知的值,因此不会生成实际的转换代码。

long value = unchecked((long)0xFFFFFFFFFFFFFFFE);
// value == -2L

请注意,在VB中,&HEFCDAB89&H98BADCFE实际上是Integer文字。他们恰好被晋升为Long。要指定Long字面值,您必须包含后缀L。所以你的作业必须是:

Dim a As Long = &HFFFFFFFFEFCDAB89L ' these are actually long literals now
Dim b As Long = &HFFFFFFFF98BADCFEL