Por que eu não posso fazer lógica booleana em bytes?
-
06-07-2019 - |
Pergunta
Em C # (3,5) eu tente o seguinte:
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;
e eu recebo Erro 132: "Não é possível converter implicitamente tipo 'int' para 'byte' existe uma conversão explícita (faltam um elenco?).". O mesmo acontece com | e ^.
O que estou fazendo de errado? Por que é me perguntando sobre ints? Por que eu não posso fazer lógica booleana em bytes?
Solução
Vários operadores não são declarados para byte
- ambos os operandos são promovidos para int
, eo resultado é int
. Por exemplo, a adição:
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 + byte2; // Compilation error
Note-se que as atribuições compostos fazer o trabalho:
byte1 += byte2;
Houve um questão SO recente sobre esta . Eu concordo que isso é particularmente penoso para operações bit a bit, porém, onde o resultado deve ser sempre o mesmo tamanho, e é uma operação logicamente inteiramente válido.
Como alternativa, você pode simplesmente lançar a volta resultado de byte:
byte byte3 = (byte) (byte1 & byte2);
Outras dicas
Porque byte (e curto) tipos não implementar os operadores
Veja Spec: 4.1.5