Подтвердить что ты не робот

Почему присвоение 0xFFFFFFFF UInteger генерирует ошибку в VB.NET?

Тип данных UInteger содержит любое значение от 0 до 4,294,967,295 (ссылка MSDN).

Если я попробую этот код в VB.NET, я получаю ошибку компилятора:

Dim Test As UInteger = &HFFFFFFFF

Ошибка: "Константное выражение не представлено в типе" UInteger ".

Почему я не могу установить 0xFFFFFFFF (4 294 967 295) в UInteger, если этот тип может удерживать это значение?

4b9b3361

Ответ 1

Я верю, потому что литерал &HFFFFFFFF интерпретируется компилятором VB.NET как Integer, и это значение для Integer является отрицательным числом (-1), которое, очевидно, не может быть выполнено до UInteger.

Эта проблема легко устраняется путем записи &HFFFFFFFFUI, добавления суффикса UI для обработки литерала как UInteger.

Ответ 2

Вы можете использовать константу MaxValue:

Dim Test As UInteger = UInteger.MaxValue

Ответ 3

Рассматривая в этой статье, представляется, что решение заключается в установке значения и HFFFFFFFFUI, поскольку согласно статье:

Если вы просто пишете & HFFFFFFFF, то обрабатывается как 32-битное целое число, значение равно -1, и вы не можете назначить это UInteger.

Если вы пишете & HFFFFFFFFL, тогда он рассматривается как подписанное 64-битное целое число, теперь двоичный код: 0000000000000000000000000000000011111111111111111111111111111111

Ответ 4

Кстати, ничего не стоит, что "LongValue = LongValue And Not & h8000" просто очищает один бит в "LongValue", как и "LongValue = LongValue And Not & h800000000000". С другой стороны, "LongValue = LongValue And Not & h80000000" очистит верхние 33 бита LongValue.

Ответ 5

Вы можете написать "-1", что совпадает с 4 294 967 295