查看此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
short
+short
=short
?
有一点背景知识:我正在对“小数”(即<8)执行一长串计算,并将中间结果存储在一个大数组中。使用字节数组(而不是int数组)会更快(由于缓存命中)。但是,通过代码传播的大量字节广播使它变得更加难以理解。
byte1 | byte2
根本不将其视为数字。这正好将它们视为位模式。我理解您的观点,但是碰巧每次我在C#中对字节进行任何算术运算时,我实际上都将它们视为位,而不是数字,并且这种行为总是存在。