我有以下代码:
foreach (byte b in bytes)
{
byte inv = byte.MaxValue - b;
// Add the new value to a list....
}
当我这样做时,我收到以下错误:
Cannot implicitly convert type 'int' to 'byte'. An explicit conversion exists (are you missing a cast?)
此语句的每个部分都是一个字节。为什么C#想要将byte.MaxValue - b
转换为int?
如果没有施法,你不应该这样做吗? (即我不想这样做:byte inv = (byte) (byte.MaxValue - b);
)
答案 0 :(得分:4)
答案 1 :(得分:4)
Raymond Chen在这里回答你的问题:
http://blogs.msdn.com/oldnewthing/archive/2004/03/10/87247.aspx
答案 2 :(得分:2)
对于加法,乘法和减法,有一个相当不错的解释:在计算中包括进位,然后将它们丢弃比如果它们最初被丢弃时更容易计算进位。
对于按位运算符(交集,包含联合,独占联合,补语),推理根本不存在水。我唯一能想到的是,如果你开始使用有符号和无符号操作数的混合,然后将结果保存为更宽的类型,那么符号扩展会有些含糊不清。但这并不能解释为什么按位运算是一元的,或者所有操作数具有相同类型的运算应该将结果扩展到int
。我认为这是一个非常令人烦恼的C#设计缺陷:
byte a, b;
byte c = a | b;
生成错误。