2010-09-01 20 views

Respuesta

25

yo creo que es porque el literal &HFFFFFFFF es interpretado por el compilador de VB.NET como Integer, y que el valor de una Integer es un número negativo (-1), lo que obviamente no se puede convertir a un UInteger.

Este problema se soluciona fácilmente escribiendo &HFFFFFFFFUI, agregando el sufijo UI para tratar el literal como UInteger.

+1

Wow. Simplemente guau. – Thanatos

8

podría utilizar el MaxValue constante:

Dim Test As UInteger = UInteger.MaxValue 
2

En cuanto a this article, parece que la solución es establecer el valor como & HFFFFFFFFUI, ya que según el artículo:

If you just write &HFFFFFFFF then it is treated as a signed 32 bit integer, value is -1, and you can't assign that to a UInteger.

If you write &HFFFFFFFFL then it is treated as a signed 64 bit integer, now the binary is: 0000000000000000000000000000000011111111111111111111111111111111

+4

El sufijo correcto para 'UInteger' sería' UI' o 'ui', por lo que en este ejemplo' & HFFFFFFFFui' debe preferirse a 'L' porque con' L' se requiere una conversión de estrechamiento. –

+0

Gran idea. Actualicé la parte en negrita en consecuencia. El artículo (foro) tenía algunos años. –

+0

Esta respuesta ya no tiene sentido. Citas y citas un artículo, en apoyo de una solución completamente diferente que proviene de un comentario. –

0

Incidentalmente , no vale la pena que "LongValue = LongValue And Not & h8000" simplemente borre un bit en "LongValue", al igual que "LongValue = LongValue A" nd no & h800000000000 ". Por otro lado, "LongValue = LongValue And Not & h80000000" eliminará los 33 bits superiores de LongValue.

-1

Puede escribir "-1" que es lo mismo que 4,294,967,295

Cuestiones relacionadas