2015-09-18 20 views
6

Sto provando a convertire un po 'di codice java in C# e ha funzionato perfettamente fino ad ora ma ho riscontrato un problema con l'operatore ^. In C# Console.WriteLine(127^0xffffffff); stampe 4294967168 mentre in Java System.out.println(127^0xffffffff); stampe -128. Mi sono guardato intorno per vedere se c'è qualcos'altro che ho bisogno di usare, ma non ho incontrato nulla.C# bitwise XOR (^) rispetto a Java bitwise XOR (^)

+0

dimenticato di aggiungere, ho bisogno di stampare -128. – Orion

+2

In Java, gli operandi vengono promossi per digitare 'int', e il risultato è un' int'. In C# gli operandi sono promossi a 'uint', e il risultato è un' uint'. Il casting appropriato dovrebbe occuparsi di questo. –

risposta

8

C# supporta firmato così come senza segno interi (Java supporta firmato solo quelli):

unchecked { 
    // you want signed int 
    int result = (int) (127^0xffffffff); 

    Console.WriteLine(result); 
    } 
+2

Il vero problema è che 0xffffffff non può essere rappresentato come un numero positivo in un int firmato, che quindi viene interpretato come int non firmato. '0xff' sarebbe interpretato come int e non unsigned int. – Voo

+0

Ah! Silly me. Grazie mille! Selezionerò questa come risposta quando mi lascerà in circa 6 minuti. – Orion