2009-06-18 57 views
6

在C#(3.5),我尝试以下方法:为什么我不能在字节上做布尔逻辑?

byte byte1 = 0x00; 
byte byte2 = 0x00; 
byte byte3 = byte1 & byte2; 

,我得到错误132:“无法隐式转换类型‘诠释’到‘字节’的显式转换存在(是否缺少强制转换?) ”。 | |也会发生同样的情况和^。

我在做什么错?为什么它问我有关整数?为什么我不能在字节上做布尔逻辑?

+2

.NET中的所有算术都基于int。有一个相关的问题还有一些讨论。这不是您的问题的答案,但您可能会对C#如何处理算术有所了解:http://stackoverflow.com/questions/941584/byte-byte-int-why – 2009-06-18 09:26:26

+0

“因为C#不是完美的语言“,我是如何解释这一点的。这是它的一个瑕疵(与其他语言相比,C#有迄今为止最少和最不具有影响力的疣...) – 2012-09-25 11:19:52

回答

12

对于byte,并未声明各种运算符 - 两个操作数都被提升为int,结果为int。例如,除了:

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

需要注意的是复合赋值做的工作:

byte1 += byte2; 

有一个recent SO question on this。我同意这对于按位运算来说尤其令人厌烦,但结果应该总是相同的大小,并且这是一个逻辑上完全有效的操作。

作为一种变通方法,你可以把结果返回字节:

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

因为字节(短)类型不实现这些运营商

见规格表:4.1.5