Дивлячись на цей 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
?
Трохи довідки: я виконую довгий список обчислень на "малі числа" (тобто <8) і зберігаю проміжні результати у великому масиві. Використання байтового масиву (замість масиву int) швидше (через хіти кешу). Але широкі байтові коди, розповсюджені через код, роблять його набагато нечитабельнішим.
byte1 | byte2
зовсім не трактує їх як числа. Це трактує їх саме як візерунки бітів. Я розумію вашу точку зору, але так трапляється, що кожного разу, коли я робив будь-яку арифметику на байтах в C #, я насправді ставився до них як до бітів, а не до числа, і така поведінка завжди перешкоджає.