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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top