关于c#:为什么我不能在字节上做布尔逻辑?

Why can't I do boolean logic on bytes?

在C(3.5)中,我尝试以下方法:

1
2
3
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;

我得到错误132:"无法将类型"int"隐式转换为"byte"。存在显式转换(是否缺少强制转换?).同样的情况也发生在和^。

我做错什么了?为什么问我国际贸易组织?为什么我不能在字节上做布尔逻辑?


没有为byte声明各种运算符-两个操作数都提升为int,结果是int。例如,添加:

1
2
3
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 + byte2; // Compilation error

请注意,复合作业确实有效:

1
byte1 += byte2;

最近有一个这样的问题。我同意这对于按位运算来说尤其令人讨厌,因为它的结果应该总是相同的大小,并且它在逻辑上是完全有效的运算。

作为解决方法,您可以将结果强制转换回字节:

1
byte byte3 = (byte) (byte1 & byte2);


因为byte(和short)类型不实现这些运算符

见规格:4.1.5