¿Por qué no puedo hacer lógica booleana en bytes?
-
06-07-2019 - |
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?
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