Это один из тех, почему так происходит вопросы.Мне нужно взять значение Int32 и «ИЛИ» его с минимальным значением его типа (в результате переноса 10-летнего приложения VBA).
Это приводит к поломке компилятора с предупреждением и ошибкой,сначала код, который ломается, затем код, который работает, а затем сообщение об ошибке.
ломает компилятор (пожалуйста, игнорируйте имя переменной, тип VBA длинный и я использую Int32):
UInt32Val = UInt32Val | 0x80000000;
Это не нарушает компилятор:
UInt32Val = UInt32Val | Int32.MinValue;
Я получаю следующие ошибки:
- Побитовый оператор или оператор, используемый в операнде с расширенным знаком;сначала рассмотрите приведение к меньшему типу без знака
- Невозможно неявно преобразовать тип 'long' в 'int'.Существует явное преобразование (вам не хватает приведения?)
Насколько я понимаю, значения 0x80000000 и Int32.MinValue равны -2147483648.
Моя большая проблема с этим портом заключается в том, чтоприложение VBA использует long и int, которые переводятся в .NET как Int32 и Int16 соответственно, и происходит много сдвигов и обмена битами.
Таким образом, я думаю, чтобы убедиться, что размер и подписанное свойство переменных совпадают, чтобы убедиться, что я получаю те же значения в перенесенном приложении, что и в приложении VBA.
Во всяком случае, концептуально, я скрываю проблему, если я могу исправить проблему компилятора путем замены исходного восьмеричного значения на константу?Я собираюсь запустить оба приложения и начать сравнивать значения, но я действительно хочу понять, что здесь происходит.
Спасибо.