UInteger数据类型包含0到4,294,967,295之间的任何值(参考MSDN)。
如果我在VB.NET中尝试此代码,则会出现编译错误:
Dim Test As UInteger = &HFFFFFFFF
错误:“常量表达式在'UInteger'类型中无法表示。
如果此类型可以保存此值,为什么我不能将0xFFFFFFFF(4,294,967,295)设置为UInteger?
答案 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相同