运营商"&&"不能应用于' int'类型的操作数和' int'

时间:2016-12-13 07:51:15

标签: c#

我不知道这两个代码有什么不同。以上只有&,而下面有&&。我有上述代码的错误。我不知道如何解决它。

Cmd3[8] = (byte)(Length & 0xFF);
Cmd3[9] = (byte)(((Length >> 8) && 0xFF) ? -1 : 0);

希望你们能帮帮我。

2 个答案:

答案 0 :(得分:2)

你可能意味着按位而且:&;另一个问题是,与 C 不同, C#并不会将整数0隐式转换为bool false,最后,(byte) -1转换可能会导致OverflowException

// since -1 is out of byte range and you don't want exception to be thrown
// you have to (in general case) put "unchecked" to allow integer overflow 
unchecked { 
  ...
  Cmd3[8] = (byte)(Length & 0xFF);
  // != 0: C# can't convert int 0 into bool false
  // &:    bitwise And (not logical one)
  Cmd3[9] = (byte)(((Length >> 8) & 0xFF) != 0 ? -1 : 0); // -1 can cause integer overflow
  ...
}

答案 1 :(得分:1)

不同之处在于单个&是按位AND,而&&是布尔运算符(只能应用于布尔操作数)。 您可能希望代码使用单个&