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 回答