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