byte = byte - byte所需的类型转换?

Vac*_*ano 8 .net c# c#-3.0

我有以下代码:

foreach (byte b in bytes)
{
    byte inv = byte.MaxValue - b;
    // Add the new value to a list....
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我收到以下错误:

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);)

Bil*_*ard 4

根据C# 语言参考

因为赋值运算符右侧的算术表达式默认计算结果为 int。

其原因可能是因为您的处理器访问 4 字节内存地址的速度比访问 1 字节内存地址的速度更快,因此算术运算符被定义为处理 4 字节操作数。

  • 即使 MSIL 仅支持 module-2**32 算术,当需要将结果存储到与操作数一样窄的变量中时,C# 编译器仍然可以自由地插入缩小转换。 (3认同)
  • 我只希望编译器在符合类型系统时插入强制转换。由于在我看来,将 byte & byte 的结果保存到另一个字节中是类型安全的,因此编译器可以使用最有效的任何指令序列来做到这一点。如果这恰好是 32 位宽并且随后进行窄化转换,则它并没有破坏类型安全性,因此 IMO 完全可以。 (2认同)