Olhando para este código C #:
byte x = 1;
byte y = 2;
byte z = x + y; // ERROR: Cannot implicitly convert type 'int' to 'byte'
O resultado de qualquer matemática realizada em byte
(ou short
) tipos é implicitamente convertido de volta para um número inteiro. A solução é converter explicitamente o resultado em um byte:
byte z = (byte)(x + y); // this works
O que eu estou querendo saber é por quê? É arquitetônico? Filosófico?
Nós temos:
int
+int
=int
long
+long
=long
float
+float
=float
double
+double
=double
Então por que não:
byte
+byte
=byte
short
+short
=short
?
Um pouco de fundo: estou executando uma longa lista de cálculos sobre "pequenos números" (ou seja, <8) e armazenando os resultados intermediários em uma grande variedade. O uso de uma matriz de bytes (em vez de uma matriz int) é mais rápido (devido a ocorrências de cache). Mas a extensa conversão de bytes espalhada pelo código o torna muito mais ilegível.
byte1 | byte2
não os trata como números. Isso é tratá-los precisamente como padrões de bits. Entendo o seu ponto de vista, mas acontece que toda vez que eu fazia aritmética em bytes em C #, eu os tratava como bits, não como números, e esse comportamento está sempre no caminho.