Дивлячись на цей 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 #, я насправді ставився до них як до бітів, а не до числа, і така поведінка завжди перешкоджає.