1

次のコードをリファクタリングする必要があるため、コンパイラの警告は生成されません。

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

これはキャストによって修正できることは理解していますが、ビットごとの演算子の経験がある人が正しいことを確認してくれることを感謝します。

4

1 に答える 1

0

これは確かにコンパイラのバグであり、報告されて修正されています (私が報告したのは、既に修正されていることがわかっただけです)。bitwise-or-operator-used-on-a-sign-extended-operand-in-visual-studio-2015を参照してください。

ただし、その間に回避したい場合は、次のように修正できます。

 bi_buf;
 int bi_valid;
 int value;
 ....
 bi_buf = (short)((int)bi_buf | (int)((value << bi_valid) & 0xffff))
于 2015-10-08T00:21:58.890 に答える