在 C# (3.5) 中,我尝试以下操作:
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;
我得到错误 132:“无法将类型 'int' 隐式转换为 'byte'。存在显式转换(您是否缺少强制转换?)”。| 也会发生同样的情况 和^。
我究竟做错了什么?为什么它问我整数?为什么我不能对字节进行布尔逻辑?
在 C# (3.5) 中,我尝试以下操作:
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;
我得到错误 132:“无法将类型 'int' 隐式转换为 'byte'。存在显式转换(您是否缺少强制转换?)”。| 也会发生同样的情况 和^。
我究竟做错了什么?为什么它问我整数?为什么我不能对字节进行布尔逻辑?
没有声明各种运算符byte
- 两个操作数都被提升为int
,结果是int
. 例如,加法:
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 + byte2; // Compilation error
请注意,复合分配确实有效:
byte1 += byte2;
最近有一个关于此的 SO 问题。我同意这对于按位运算来说尤其令人讨厌,因为结果应该始终是相同的大小,并且它在逻辑上是完全有效的运算。
作为一种解决方法,您可以将结果转换回字节:
byte byte3 = (byte) (byte1 & byte2);
因为字节(和短)类型不实现这些运算符
见规格:4.1.5