6

在 C# (3.5) 中,我尝试以下操作:

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

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

我究竟做错了什么?为什么它问我整数?为什么我不能对字节进行布尔逻辑?

4

2 回答 2

12

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

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

请注意,复合分配确实有效:

byte1 += byte2;

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

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

byte byte3 = (byte) (byte1 & byte2);
于 2009-06-18T09:23:21.750 回答
0

因为字节(和短)类型不实现这些运算符

见规格:4.1.5

于 2009-06-18T09:23:45.383 回答