【发布时间】:2010-10-30 19:21:26
【问题描述】:
看看这段 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?
一点背景知识:我正在对“小数”(即 byte 数组(而不是 int 数组)更快(因为缓存命中)。但是通过代码传播的大量字节转换使其更加难以阅读。
【问题讨论】:
-
在这里有用的不是 Eric 对 标准 的了解——而是他对语言的设计 的了解;什么不是为什么。但是,是的,埃里克的回答会非常明确:)
-
下面的各种想法是对设计考虑的合理近似。更笼统地说:我不认为字节是“数字”;我认为它们是位模式,可以解释为数字、字符、颜色等。如果您要对它们进行数学运算并将它们视为数字,那么将结果转换为更普遍解释为数字的数据类型是有意义的。
-
@Eric:这对于字节来说很有意义,但对于 short/ushort 来说可能就没那么有意义了。
-
@Eric:
byte1 | byte2根本没有将它们视为数字。这将它们精确地视为位模式。我理解你的观点,但碰巧的是,每次我在 C# 中对字节进行任何算术运算时,我实际上都是将它们视为位,而不是数字,而且这种行为总是会阻碍。
标签: c# type-conversion