Как правильно реорганизовать побитовое использование 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))
Другие вопросы по тегам