Bitweises xNor

DrDi

Mitglied
Hallo,

ich soll ein bitweises xnor implementieren mit den Operatoren | und ~.
Mein Code sieht wie folgt aus:

Java:
public class Straightline
{

    public int bitXnor(int x, int y)
    {
        return ~(x | y) | ~(~x | ~y);
    }
}

Meines erachtens müsste es so richtig sein. Allerdings erhalte ich als Rückgabewert nicht nachvollziehbare Werte.
z.B. x = 60 und y = 3 liefert mir -64.

Integer Werte werden in Java als 2-Komplement dargestellt. Aber wie komme ich auf die -64?

Mit freundlichen Grüßen DrDi
 

DrDi

Mitglied
Können wir das einmal an folgenden Beispiel schriftlich durchgehen?

x = 0011 <-> 3
y = 0101 <-> 5

xor liefert uns:

0011
0101
-----
0110 <-> 6

Wir möchten jedoch xNor also invertieren wir 0110:

0110
------
1001 <-> 9

Also müsste, wenn mein Code so richtig ist 9 zurückgeliefert werden? Was er jedoch nicht macht. Ich bekomme als Wert -7 zurück. Stehe ein wenig auf dem Schlauch..

Gruß DrDi
 

httpdigest

Top Contributor
Ich sage es nochmal: Es wird auch das Vorzeichenbit invertiert! In deinem Beispiel gehst du von unsigned Zahlen aus und dein Beispiel hat überhaupt keine Vorzeichenbits in den Binärdarstellungen der Zahlen.
 

httpdigest

Top Contributor
Wenn wir mal von signed 8-bit Zahlen ausgehen (nur um nicht zuuu viele Einsen schreiben zu müssen), dann ist ~0110 bzw. ~00000110 = 11111001, was in Zweierkomplement interpretiert = -7 ist.
Die roten Bits sollen das Vorzeichenbit sein.
 
Zuletzt bearbeitet:
X

Xyz1

Gast
wenn mein Code so richtig ist 9 zurückgeliefert werden? Was er jedoch nicht macht. Ich bekomme als Wert -7 zurück

So?
Java:
System.out.println(bitXnor(60, 3));
//                         = 0
System.out.println(bitXnor(3, 5));
//                         = 9

static int bitXnor(int x, int y) {
    return snot(x ^ y) & 0x0f;
}

static int snot(int x) {
    return ~x & Integer.MAX_VALUE; // negates and eliminates msb
}
 

Ähnliche Java Themen

Neue Themen


Oben