Perché non riesco a fare la logica booleana sui byte?
-
06-07-2019 - |
Domanda
In C # (3.5) provo quanto segue:
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;
e ottengo l'errore 132: " Impossibile convertire implicitamente il tipo 'int' in 'byte'. Esiste una conversione esplicita (ti manca un cast?) & Quot ;. Lo stesso succede con | e ^.
Cosa sto facendo di sbagliato? Perché mi sta chiedendo degli ints? Perché non riesco a fare la logica booleana sui byte?
Soluzione
Vari operatori non sono dichiarati per byte
- entrambi gli operandi vengono promossi in int
e il risultato è int
. Ad esempio, aggiunta:
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 + byte2; // Compilation error
Nota che i compiti composti funzionano:
byte1 += byte2;
C'è stata una recente domanda SO su questo . Concordo sul fatto che ciò sia particolarmente fastidioso per le operazioni bit a bit, in cui il risultato dovrebbe sempre avere le stesse dimensioni, ed è un'operazione logicamente del tutto valida.
Per ovviare al problema, puoi semplicemente riportare il risultato in byte:
byte byte3 = (byte) (byte1 & byte2);
Altri suggerimenti
Perché i tipi di byte (e brevi) non implementano quegli operatori
Vedi specifiche: 4.1.5