在C#(3.5),我尝试以下方法:为什么我不能在字节上做布尔逻辑?
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;
,我得到错误132:“无法隐式转换类型‘诠释’到‘字节’的显式转换存在(是否缺少强制转换?) ”。 | |也会发生同样的情况和^。
我在做什么错?为什么它问我有关整数?为什么我不能在字节上做布尔逻辑?
在C#(3.5),我尝试以下方法:为什么我不能在字节上做布尔逻辑?
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;
,我得到错误132:“无法隐式转换类型‘诠释’到‘字节’的显式转换存在(是否缺少强制转换?) ”。 | |也会发生同样的情况和^。
我在做什么错?为什么它问我有关整数?为什么我不能在字节上做布尔逻辑?
对于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);
因为字节(短)类型不实现这些运营商
见规格表:4.1.5
.NET中的所有算术都基于int。有一个相关的问题还有一些讨论。这不是您的问题的答案,但您可能会对C#如何处理算术有所了解:http://stackoverflow.com/questions/941584/byte-byte-int-why – 2009-06-18 09:26:26
“因为C#不是完美的语言“,我是如何解释这一点的。这是它的一个瑕疵(与其他语言相比,C#有迄今为止最少和最不具有影响力的疣...) – 2012-09-25 11:19:52