c# - byte + byte = int...为什么?

标签 c# type-conversion

查看此 C# 代码:

byte x = 1;
byte y = 2;
byte z = x + y; // ERROR: Cannot implicitly convert type 'int' to 'byte'

byte(或 short)类型执行的任何数学运算的结果都隐式转换回整数。解决方案是将结果显式转换回一个字节:

byte z = (byte)(x + y); // this works

我想知道为什么?它是建筑的吗?哲学的?

我们有:

  • int + int = int
  • long + long = long
  • float + float = float
  • double + double = double

那么为什么不呢:

  • byte + byte = byte
  • + = ?

一些背景知识:我正在对“小数”(即 < 8)执行一长串计算,并将中间结果存储在一个大数组中。使用字节数组(而不是 int 数组)更快(因为缓存命中)。但是通过代码传播的大量字节转换使其更加不可读。

最佳答案

代码段的第三行:

byte z = x + y;

实际上是指

byte z = (int) x + (int) y;

因此,没有对字节的 + 操作,字节首先被转换为整数,两个整数相加的结果是一个(32 位)整数。

关于c# - byte + byte = int...为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/941584/

相关文章:

c++ - 将字符串复制到 char 数组

c# - 我如何在 C# 中加密 web.config 变量

c# - 在 C# webBrowser 控件中调用 Javascript 函数

c# - 无法使用 Selenium c# 保存 Whatsapp web 的 session

c# - 在 C# 中将单个属性包装在 #region 中是否有充分的理由?

c++ - 使用 avr-gcc : uint8_t vs. uint16_t 隐式转换为 float

c# - 将jp2的byte[]转为jpg文件

java - 有没有办法使用 Jackson 和/或其关联库之一(csv、json 等)将字符串转换为 Java 类型

python - 使用以下系列计算 π 的值(Matlab 转换)

c# - 为什么允许从父类(super class)到子类的隐式转换?