Конечный амперсанд в VB.NET шестнадцатеричный? - PullRequest
0 голосов
/ 22 июля 2011

Это должно быть легко для людей.У Google нет ничего, кроме ферм контента, ссылающихся на одну рекламу, и это написано на ломаном английском.Итак, давайте разберемся с этим здесь, где он будет захоронен навсегда.

Для чего нужен конечный амперсанд на шестнадцатеричных числах VB?Я читал, что он вызывает преобразование в Int32 на тот случай, если VB захочет попытаться сохранить его как Int16.Это имеет смысл для меня.Но часть, которую я не получил от объявления, состояла в том, чтобы всегда использовать конечный амперсанд для битовых масок, флагов, перечислений и т. Д. Очевидно, это связано с переопределением фетиша VB для использования чисел со знаком для внутренних целей, что может привести кстранные результаты в сравнениях.

Итак, чтобы получить простые точки, каковы правила для шестнадцатеричных чисел VB.Net, с конечным амперсандом и без него?Пожалуйста, укажите конкретное использование в случае битовых масок / флагов и тому подобного, и как можно использовать его для принудительной подписи и неподписания.

Нет C #, пожалуйста:)

Ответы [ 2 ]

2 голосов
/ 30 августа 2011

Vb.net будет расценивать шестнадцатеричные константы "& h" в диапазоне от 0x80000000-0xFFFFFFFF как отрицательные числа, если тип явно не указан как UInt32, Int64 или UInt64. Такое поведение может быть понятно, если числа были записаны точно с восемью цифрами после «&», но по какой-то причине я не могу понять, vb.net будет вести себя так, даже если числа пишутся с ведущими нулями, В существующих версиях VB можно принудительно оценить число, используя суффикс суффикса «&» (Int64), «L» (Int64), «UL» (UInt64) или «UI» (UInt32). В более ранних версиях VB «проблемный диапазон» был 0x8000-0xFFFF, и единственный способ заставить числа в этом диапазоне корректно оцениваться (как 32-разрядное целое число, которое затем называлось «Long») был трейлингом амперсанд.

1 голос
/ 22 июля 2011

Visual Basic имеет концепцию Тип символов . Их можно использовать для изменения объявлений переменных и литералов, хотя я бы не рекомендовал использовать их в объявлениях переменных - большинство разработчиков в наши дни более знакомы с As. Например. следующие объявления эквивалентны:

Dim X&
Dim X As Long

Но лично я нахожу второе более читабельным. Если бы я увидел первый, мне бы пришлось перейти по ссылке выше или использовать Intellisense, чтобы выяснить, что это за переменная (не очень хорошо, если посмотреть на код на бумаге).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...