Guardando questo codice C #:
byte x = 1;
byte y = 2;
byte z = x + y; // ERROR: Cannot implicitly convert type 'int' to 'byte'
Il risultato di qualsiasi matematica eseguita su byte(o short) tipi viene implicitamente ricondotto a un numero intero. La soluzione è quella di riportare esplicitamente il risultato su un byte:
byte z = (byte)(x + y); // this works
Quello che mi chiedo è perché? È architettonico? Filosofico?
Abbiamo:
int+int=intlong+long=longfloat+float=floatdouble+double=double
Quindi perche no:
byte+byte=byteshort+short=short?
Un po 'di background: sto eseguendo un lungo elenco di calcoli su "piccoli numeri" (cioè <8) e memorizzando i risultati intermedi in un array di grandi dimensioni. L'uso di un array di byte (anziché di un array int) è più rapido (a causa degli accessi alla cache). Ma gli estesi byte cast diffusi attraverso il codice lo rendono molto più illeggibile.
byte1 | byte2non li tratta affatto come numeri. Questo li tratta esattamente come schemi di bit. Capisco il tuo punto di vista, ma capita proprio che ogni volta che ho fatto qualsiasi aritmetica sui byte in C #, li stavo trattando come bit, non numeri, e questo comportamento è sempre tra i piedi.