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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top