Глядя на этот код 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=intlong+long=longfloat+float=floatdouble+double=double
Так почему не:
byte+byte=byteshort+short=short?
Немного предыстории: я выполняю длинный список вычислений для «малых чисел» (т.е. <8) и сохраняю промежуточные результаты в большом массиве. Использование байтового массива (вместо массива int) происходит быстрее (из-за попаданий в кэш). Но обширные броски байтов, распространяемые по коду, делают его намного более нечитаемым.
byte1 | byte2вовсе не рассматривает их как числа. Это относится к ним как к шаблонам битов. Я понимаю вашу точку зрения, но так получилось, что каждый раз, когда я выполнял какие-либо арифметические действия с байтами в C #, я фактически рассматривал их как биты, а не числа, и такое поведение всегда мешает.