Pregunta

En C # (3.5) intento lo siguiente:

byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;

y obtengo el Error 132: " No se puede convertir implícitamente el tipo 'int' a 'byte'. Existe una conversión explícita (¿te falta un reparto?) & Quot ;. Lo mismo sucede con | y ^.

¿Qué estoy haciendo mal? ¿Por qué me pregunta sobre ints? ¿Por qué no puedo hacer lógica booleana en bytes?

¿Fue útil?

Solución

No se declaran varios operadores para byte : ambos operandos se promocionan a int y el resultado es int . Por ejemplo, además:

byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 + byte2; // Compilation error

Tenga en cuenta que las asignaciones compuestas funcionan:

byte1 += byte2;

Hubo una pregunta SO reciente sobre esto . Sin embargo, estoy de acuerdo en que esto es particularmente molesto para las operaciones bit a bit, donde el resultado siempre debe ser del mismo tamaño, y es una operación lógicamente completamente válida.

Como solución alternativa, puede devolver el resultado al byte:

byte byte3 = (byte) (byte1 & byte2);

Otros consejos

Porque los tipos de bytes (y cortos) no implementan esos operadores

Ver especificaciones: 4.1.5

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top