Как правильно реорганизовать побитовое использование C# или оператора, чтобы избавиться от предупреждения компилятора (уровень 3) CS0675
Мне нужно провести рефакторинг следующего кода, чтобы он не выдавал предупреждение компилятора:
short bi_buf;
int bi_valid;
int value;
....
bi_buf |= (short)((value << bi_valid) & 0xffff);
Если уровень предупреждения компилятора установлен на 3 или выше, он выдаст следующую ошибку:
Error CS0675 Bitwise-or operator used on a sign-extended operand; consider casting to a smaller unsigned type first
Я понимаю, что это можно исправить с помощью приведения, но буду благодарен тому, кто имеет опыт работы с побитовым оператором, чтобы убедиться, что это правильно.
1 ответ
Это действительно ошибка компилятора, о которой было сообщено и исправлено (я сообщил об этом только для того, чтобы обнаружить, что она уже исправлена). См. Битовый или оператор, используемый на знаке, расширенный операнд в визуальной студии 2015
Но если вы хотите обойти это, вы можете исправить это так:
bi_buf;
int bi_valid;
int value;
....
bi_buf = (short)((int)bi_buf | (int)((value << bi_valid) & 0xffff))