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"。存在显式转换(是否缺少强制转换?).同样的情况也发生在和^。
我做错什么了?为什么问我国际贸易组织?为什么我不能在字节上做布尔逻辑?
没有为
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