Как установить большую константу с побитовой операцией на ULong? - PullRequest
4 голосов
/ 01 марта 2010

Это хорошо работает:

Public Const test As ULong = 1 << 30

Это не очень хорошо работает:

Public Const test As ULong = 1 << 31

Создает эту ошибку:

Выражение константы, не представляемое в типе 'ULong'

Как мне заставить это работать?

Это работает:

Public Const test As Long = 1 << 31

Но я должен использовать ULong .

Ответы [ 2 ]

5 голосов
/ 01 марта 2010

Вы не можете сдвинуть 1 << 31 с длинным типом данных, поэтому вы получаете эту ошибку.

Однако это связано с тем, что 1 как целочисленный литерал обрабатывается как Int32, который является целочисленным литералом по умолчанию.

Вы должны обойти это, определив это как:

Public Const test As ULong = 1UL << 30
Public Const test2 As ULong = 1UL << 31

Флаг UL говорит, чтобы сделать 1 длинным без знака. Подробнее см. В разделе Символы .

3 голосов
/ 01 марта 2010

Попробуйте следующее:

Public Const test As ULong = 1UL << 31 

Вам необходимо явно указать компилятору, что вы выполняете операцию на ULong.

С # эквивалент работает:

public const ulong test  = 1UL << 31;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...