看看这个C#代码:
byte x = 1;
byte y = 2;
byte z = x + y; // ERROR: Cannot implicitly convert type 'int' to 'byte'
Run Code Online (Sandbox Code Playgroud)
对byte
(或short
)类型执行的任何数学运算的结果都隐式地转换回整数.解决方案是将结果显式地转换回一个字节:
byte z = (byte)(x + y); // this works
Run Code Online (Sandbox Code Playgroud)
我想知道的是为什么?它是建筑吗?哲学?
我们有:
int
+ int
=int
long
+ long
=long
float
+ float
=float
double
+ double
=double
那么为什么不呢:
byte
+ byte
=byte
short
+ short
= short
?一点背景:我正在对"小数字"(即<8)执行一长串计算,并将中间结果存储在一个大数组中.使用字节数组(而不是int数组)更快(因为缓存命中).但是通过代码传播的大量字节转换使得它更加难以理解.