Глядя на этот код С#:
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) выполняется быстрее (из-за хитов кэша). Но обширные байты, распространяемые через код, делают его гораздо более нечитаемым.