查看此 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/