我不知道这两个代码有什么不同。以上只有&
,而下面有&&
。我有上述代码的错误。我不知道如何解决它。
Cmd3[8] = (byte)(Length & 0xFF);
Cmd3[9] = (byte)(((Length >> 8) && 0xFF) ? -1 : 0);
希望你们能帮帮我。
答案 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,而&&
是布尔运算符(只能应用于布尔操作数)。
您可能希望代码使用单个&
。