Почему присвоение 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, если этот тип может удерживать это значение?
Ответы
Ответ 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