为什么为UInteger分配0xFFFFFFFF会在VB.NET中生成错误?

时间:2010-09-01 18:24:43

标签: .net vb.net types

UInteger数据类型包含0到4,294,967,295之间的任何值(参考MSDN)。

如果我在VB.NET中尝试此代码,则会出现编译错误:

Dim Test As UInteger = &HFFFFFFFF
  

错误:“常量表达式在'UInteger'类型中无法表示。

如果此类型可以保存此值,为什么我不能将0xFFFFFFFF(4,294,967,295)设置为UInteger?

5 个答案:

答案 0 :(得分:27)

我相信这是因为文字&HFFFFFFFF被VB.NET编译器解释为Integer,而Integer的值是负数(-1),显然无法转换为UInteger

通过撰写&HFFFFFFFFUI并附加UI后缀以将文字视为UInteger,可以轻松解决此问题。

答案 1 :(得分:8)

您可以使用MaxValue常量:

Dim Test As UInteger = UInteger.MaxValue

答案 2 :(得分:2)

查看this article,似乎解决方案是将值设置为& HFFFFFFFFUI ,因为根据文章:

  

如果您只是写& HFFFFFFFF,那么它被视为带符号的32位整数,值为-1,并且您不能将其分配给UInteger。

     

如果你写& HFFFFFFFFL然后它被视为带符号的64位整数,现在二进制是:   0000000000000000000000000000000011111111111111111111111111111111

答案 3 :(得分:0)

顺便说一句,“LongValue = LongValue而不是& h8000”只是清除'LongValue'中的一位,“LongValue = LongValue And Not& h800000000000”也是值得的。另一方面,“LongValue = LongValue And Not& h80000000”将清除LongValue的前33位。

答案 4 :(得分:-1)

你可以写“-1”,它与4,294,967,295相同