2014-05-04 1 views
5

Sto tentando di eseguire un bit per bit non su un byte, come questo:Esecuzione di bit per bit non su un byte

byte b = 125; 
byte notb = ~b; // Error here 

Questo non funziona perché l'operatore not funziona solo con i tipi interi. Posso fare questo, e questo sembra funzionare:

byte b = 125; 
byte notb = (byte)((~b) & 255); 

Questo sembra funzionare perché il suo not'ing il numero, quindi lanciando tutti i bit dopo l'8 bit a 0, poi il cast a un byte. Quello che mi chiedo è se c'è un modo migliore per fare questo o un modo più semplice che sto solo trascurando?

risposta

5

Non sembra che Lynx stia pianificando di aggiornare la sua risposta, quindi per riferimento futuro, gli operatori bit a bit funzionano bene su byte. Restituiscono solo un int, che non è assegnabile a una variabile di tipo byte. Hai solo bisogno di un cast qui:

byte notb = (byte)~b; 
+0

Sì, hai ragione. – Lynx

2

Questo è fondamentalmente meglio di quello che hai scritto perché è più chiaro. Ho letto alcuni argomenti su questa cosa, ma sembra che tu non possa davvero usare un bit per bit non su un byte.

byte b = 125; 
byte notb= (byte)~b; // result is 130 
0

Ciò funzionerà

byte b = 125; 
byte notb = (byte)~(int)b; 

Questo è colata b per int e poi facendo ~ e lanciando di nuovo a byte.

Ho verificato il risultato. Sia il tuo che il mio codice emettono 130.