Binäre Abfrage

kodela

Bekanntes Mitglied
Hallo,

wer kann mir helfen? Ich stehe momentan auf dem Schlauch.

Über die Bit-Operatoren soll ein Integerwert darauf geprüft werden, ob in ihm Bits gesetzt sind, welche in einer Maske nicht gesetzt sind.

Beispiel:
Code:
Testwert: 0 0 1 0 1 1 0 0
Maske   : 0 0 1 1 0 1 0 0

Erwartetes Ergebnis: true, da zwar zwei Bits gesetzt sind, welche auch in der Maske gesetzt sind. Es ist aber mit dem Bit 3 auch ein Bit vorhanden, welches in der Maske nicht vertreten ist.

oder:
Code:
Testwert: 0 0 1 0 0 1 0 0
Maske   : 0 0 1 1 0 1 0 0

Erwartetes Ergebnis: false, da im Testwert nur Bits vorkommen, welche auch in der Maske verteten sind.

Wie kann eine Abfrage formuliert werden, die mir das gewünschte Ergebnis liefert?

Danke im Voraus. Bitte nicht wundern, wenn ich auf eine Antwort nicht sofort reagiere. Ich bin für einige Tage auswärts.

MfG, kodela
 

Robat

Top Contributor
Du könntest den Testwert mit der Maske Oder-verknüpfen. Wenn am Ende wieder die Maske heraus kommt weißt du auf jeden Fall dass im Testwert keine Einsen vorkommen, die es in der Maske nicht gibt.
 

kodela

Bekanntes Mitglied
Hallo und danke!

Das ODER ist es, das ich bei meinen Überlegungen unverständlicherweise nicht berücksichtigt habe. Mit dem UND würde es nur dann gehen, wenn im Testwert auch alle Bits der Maske gesetzt wären. Oder sehe ich da etwas falsch?

MfG, kodela
 

Flown

Administrator
Mitarbeiter
Code:
Testwert: 0 0 1 0 1 1 0 0
Maske   : 0 0 1 1 0 1 0 0
T & M   : 0 0 1 0 0 1 0 0
Code:
Testwert: 0 0 1 0 0 1 0 0
Maske   : 0 0 1 1 0 1 0 0
T & M   : 0 0 1 0 0 1 0 0
Siehst du es?
 

Flown

Administrator
Mitarbeiter
Wenn du wissen willst ob dein Testwert der Bitmaske entspricht (ich nehme an es sind ints) dann mach einfach testwert == maske.
Wenn du die Unterschiede wissen möchtest, dann einfach ein XOR.
 

kodela

Bekanntes Mitglied
Hallo zusammen,

bin wieder zurück und bedanke mich erst einmal für all Eure Hinweise.

Nach wie vor kann ich allerdings nur die Lösung über eine OR-Verknüpfung als zielführend sehen. Zur Erinnerung noch einmal die Problembeschreibung:
Über die Bit-Operatoren soll ein Integerwert darauf geprüft werden, ob in ihm Bits gesetzt sind, welche in einer Maske nicht gesetzt sind.
Es kommt also nicht darauf an, ob der Testwert der Bitmaske entspricht, ich möchte auch nicht die Unterschiede zwischen einem Testwert und einer Bitmaske feststellen, auch nicht, welche Bits einer Maske im Testwert gesetzt sind. Es soll festgestellt werden, ob im Testwert Bits gesetzt sind, die in der Maske nicht gesetzt sind. Oder anders herum, ob im Testwert ausschließlich, aber nicht zwingend alle Bits gesetzt sind, welche auch in der Maske gesetzt sind.

Dazu hier noch einige Beispiele:
Code:
// Im Testwert Bits, die in der Maske nicht vertreten sind:

Testwert: 0 0 1 0 1 1 0 0
Maske   : 0 0 1 1 0 1 0 0
T & M   : 0 0 1 0 0 1 0 0   // Ergebnis != Maske

// Im Testwert nur Bits, die auch in der Maske vertreten sind:

Testwert: 0 0 1 0 0 1 0 0
Maske   : 0 0 1 1 0 1 0 0
T & M   : 0 0 1 0 0 1 0 0   // Ergebnis != Maske

Was wäre, wenn:

// Im Testwert Bits, die in der Maske nicht vertreten sind:

Testwert: 0 1 0 0 1 0 0 0
Maske   : 0 0 1 1 0 1 0 0
T & M   : 0 0 0 0 0 1 0 0   // Ergebnis != Maske


Testwert: 0 1 1 0 0 1 0 1
Maske   : 0 0 1 1 0 1 0 0
T & M   : 0 0 1 0 0 1 0 0   // Ergebnis != Maske

// Im Testwert nur all die Bits, die auch in der Maske vertreten sind:

Testwert: 0 0 1 1 0 1 0 0
Maske   : 0 0 1 1 0 1 0 0
T & M   : 0 0 1 1 0 1 0 0   // Ergebnis == Maske

Mit OR geht es jedoch

// Im Testwert nur Bits, die auch in der Maske vertreten sind:

Testwert: 0 0 1 1 0 1 0 0
Maske   : 0 0 1 1 0 1 0 0
T | M   : 0 0 1 1 0 1 0 0   // Ergebnis == Maske

Testwert: 0 0 0 1 0 0 0 0
Maske   : 0 0 1 1 0 1 0 0
T | M   : 0 0 1 1 0 1 0 0   // Ergebnis == Maske

// Im Testwert Bits, die in der Maske nicht vertreten sind:

Testwert: 0 1 1 1 1 1 0 0
Maske   : 0 0 1 1 0 1 0 0
T | M   : 0 1 1 1 1 1 0 0   // Ergebnis != Maske

Testwert: 0 1 0 0 0 0 0 1
Maske   : 0 0 1 1 0 1 0 0
T | M   : 0 1 1 1 0 0 0 1   // Ergebnis != Maske
Mit
Code:
if (maske | testwert ==  maske)
kann ich also die Fälle behandeln, bei denen im Testwert ausschließlich Bits gesetzt sind, welche auch in der Make gesetzt sind und bei einer Negierung der Abfrage einfach die gegenteilige Situation.

MfG, kodela
 

Meniskusschaden

Top Contributor
Mit
Java:
if (maske | testwert ==  maske)
kann ich also die Fälle behandeln, ...
Fehlt da nicht ein Klammernpaar: if ((maske | testwert) == maske)?

Nach wie vor kann ich allerdings nur die Lösung über eine OR-Verknüpfung als zielführend sehen.
Die drei genannten Lösungsvorschläge sind äquivalent:
Java:
(testwert|maske) == maske
(testwert&maske) == testwert
(testwert&~maske) == 0
 

kodela

Bekanntes Mitglied
Doppelter Eintrag, kann gelöscht werden. Ursprünglicher Inhalt im nächsten Beitrag.
Eintrag wurde nach dem Absenden nicht angezeigt. Daraufhin nahm ich noch eine kleine Änderung vor und sandte die Antwort noch einmal ab. Da hatte ich dann plötzlich zwei Beiträge.

MfG, kodela
 
Zuletzt bearbeitet:

kodela

Bekanntes Mitglied
Fehlt da nicht ein Klammernpaar: if ((maske | testwert) == maske)?
Ja, dieser Ausdruck muss so geklammert werden, wie Du es zeigst.

Die drei genannten Lösungsvorschläge sind äquivalent:
Java:
(testwert|maske) == maske
(testwert&maske) == testwert
(testwert&~maske) == 0
Das sehe ich leider nicht so. In diesem Fall:
Code:
Testwert: 0 1 0 0 1 0 0 0
Maske   : 0 0 1 1 0 1 0 0
T & M   : 0 0 0 0 0 1 0 0
entspricht das Ergebnis beispielsweise nicht dem Testwert. Das wäre doch nur dann der Fall, wenn alle Bits des Testwertes auch in der Maske vertreten sind. Oder sehe ich da etwas falsch?

MfG, kodela
 

Meniskusschaden

Top Contributor
In folgendem Beispiel arbeitet die Methode check1 nach dem Verfahren, dass du bereits für geeignet befunden hast (habe nur den Klammerfehler beseitigt, damit es kompiliert). Die beiden anderen Methoden liefern dasselbe Ergebnis:
Java:
public class BitOperatorTest {
    private static boolean check1(int testwert, int maske) {
        return (testwert|maske) == maske;
    }
  
    private static boolean check2(int testwert, int maske) {
        return (testwert&maske) == testwert;
    }
  
    private static boolean check3(int testwert, int maske) {
        return (testwert&~maske) == 0;
    }

    public static void main(String[] args) {
        int testwert = 0b01001000;
        int maske    = 0b00110100;
        System.out.println(check1(testwert, maske));
        System.out.println(check2(testwert, maske));
        System.out.println(check3(testwert, maske));
    }
}
Ausgabe:
Code:
false
false
false
Es wird bei allen Verfahren false ausgegeben, wenn im Testwert gesetzte Bits existieren, deren Pendant in der Maske nicht gesetzt ist. Das willst du wahrscheinlich genau anders herum haben, müsstest es also noch negieren. Mir ging es aber erst einmal um die Äquivalenz der drei Ausdrücke.
In diesem Fall:
Code:
Testwert: 0 1 0 0 1 0 0 0
Maske   : 0 0 1 1 0 1 0 0
T & M   : 0 0 0 0 0 1 0 0
entspricht das Ergebnis beispielsweise nicht dem Testwert.
Das müsste so aussehen:
Code:
Testwert: 0 1 0 0 1 0 0 0
Maske   : 0 0 1 1 0 1 0 0
T & M   : 0 0 0 0 0 0 0 0
Es stimmt zwar trotzdem, dass das Ergebnis nicht dem Testwert entspricht, aber wie eben beschrieben bedeutet das ja gerade, dass mindestens eines der gesuchten Bits existiert.
 

kodela

Bekanntes Mitglied
Hallo Meniskusschaden,

Du hast absolut Recht. Heute Nacht ist bei mir der Groschen gefallen. Herzlichen Dank für Dein Bemühen!

MfG, kodela
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M binäre Suchbäume Preorder-Traversierung Allgemeine Java-Themen 15
M Binäre Suche Allgemeine Java-Themen 6
S Webservices für binäre Daten? Allgemeine Java-Themen 5
M Binäre Suchbäume remove Allgemeine Java-Themen 8
A Binäre Suche im Array mit StackOverflowError Allgemeine Java-Themen 3
G Binäre Datei lesen / schreiben Allgemeine Java-Themen 9
H Input/Output Binäre Daten konvertieren, Output hat Zeilenumbrüche?? Allgemeine Java-Themen 9
M Binäre Datei schreiben und lesen Allgemeine Java-Themen 4
H Binäre Suchbäume Allgemeine Java-Themen 14
D binäre Datei einlesen und schreiben? Allgemeine Java-Themen 3
P jFreeChart, binäre Signale Allgemeine Java-Themen 2
B Wie erstelle ich dazu eine Abfrage ob der Button gedrückt wurde? Allgemeine Java-Themen 8
J Mehrfache if-else-Abfrage zusammenfassen Allgemeine Java-Themen 51
L 2 Dimensionale ListArray Abfrage nach einem Wert suchen Allgemeine Java-Themen 5
I Wie kann ich den Wert aus einer If abfrage ausgeben Allgemeine Java-Themen 23
Zeppi NullPointerException in einer if-Abfrage Allgemeine Java-Themen 6
1Raini Java if-Abfrage funktioniert nicht! Allgemeine Java-Themen 3
tom.j85 Exception bei Abfrage von Ländercodes in API? Allgemeine Java-Themen 13
T Fehler bei IF abfrage Allgemeine Java-Themen 8
D Mehrdimensionale Abfrage Allgemeine Java-Themen 15
MiMa If-Abfrage mit Parameter Allgemeine Java-Themen 8
D MAC Adressen Abfrage Allgemeine Java-Themen 5
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
B Swing Hilfe bei Abfrage von Benutzernamen und Passwort Allgemeine Java-Themen 2
J If Abfrage funktioniert nicht Allgemeine Java-Themen 4
B Java Abfrage Netzbetrieb oder Akkubetrieb Allgemeine Java-Themen 1
T Login-Abfrage Allgemeine Java-Themen 3
T Login mit LDAP-Abfrage Allgemeine Java-Themen 3
M Event Handling Tastatur abfrage Allgemeine Java-Themen 5
2 If-Abfrage um Uhrzeit einzuordnen Allgemeine Java-Themen 2
F Java ip abfrage mit Dateiausgabe ? Allgemeine Java-Themen 2
V Java Editor Problem mit ! bei if-Abfrage Allgemeine Java-Themen 5
N Schlüsselworte if abfrage ob linke oder rechte maustaste gedrückt ist Allgemeine Java-Themen 5
H args abfrage vereinfachen Allgemeine Java-Themen 7
P Tastatur abfrage ohne KeyListener Allgemeine Java-Themen 3
E Methoden Server Benutzer abfrage Allgemeine Java-Themen 2
D Internet Abfrage aber mit Warteschleife Allgemeine Java-Themen 6
B Kapselung if-Abfrage bei "MVC-verteilten" Listenern Allgemeine Java-Themen 5
R JNI if abfrage gibt immer false zurück. Allgemeine Java-Themen 7
S if-Abfrage Allgemeine Java-Themen 5
T Wiederholte Abfrage? Allgemeine Java-Themen 5
B abfrage ob file ausgeführt wurde Allgemeine Java-Themen 4
Z Boolean Abfrage gibt kein Boolean zurück, aber warum? Allgemeine Java-Themen 6
P Google Abfrage auslesen Allgemeine Java-Themen 2
MQue Performance Methodenaufruf - if Abfrage Allgemeine Java-Themen 19
W ICQ Status Abfrage mit Java Allgemeine Java-Themen 3
M if - else Abfrage beenden Allgemeine Java-Themen 4
MQue if- Abfrage Allgemeine Java-Themen 4
B Abfrage ob JRE installiert ist, JAR automatisch starten Allgemeine Java-Themen 5
MQue if Abfrage Allgemeine Java-Themen 27
MQue if- Abfrage Allgemeine Java-Themen 26
C Versionsstring Abfrage Allgemeine Java-Themen 7
G Tastatur abfrage Allgemeine Java-Themen 8
D Doppeltverschachtelte if-Abfrage Allgemeine Java-Themen 10
Z mit java htaccess - abfrage bestätigen/umgehen Allgemeine Java-Themen 2
U if Abfrage macht etwas falsch Allgemeine Java-Themen 2
G Problem mit if-Abfrage bei Benutzeingabe Allgemeine Java-Themen 2
P Java Acces Datenbank Problem ! (Brauche eine Abfrage) Allgemeine Java-Themen 5
K Abfrage ob JRE oder JDK auf System installiert ist. Allgemeine Java-Themen 12
T IF Abfrage + YES_NO Option mittels JOptionPane Allgemeine Java-Themen 3
U IF-Abfrage Allgemeine Java-Themen 17
H Java-Abfrage Allgemeine Java-Themen 9
A FileChooser Datei-Überschreiben Abfrage Allgemeine Java-Themen 2
F Java Passwort abfrage Allgemeine Java-Themen 2
S CDDB-Abfrage mit Java unter Linux? Allgemeine Java-Themen 4
L Datenbank Abfrage (Felder&Tabelle nicht fix) in ArrayLis Allgemeine Java-Themen 4
S Integer-splitten für Abfrage. Allgemeine Java-Themen 4
G Abfrage in datenbank Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben