Paritybit

Hzrfa

Aktives Mitglied
Hallo ich muss als Übung ein Java Programm schreiben, Überprüfung der Zahl mit der Prüfziffer.
Irgendwie funktioniert es nicht. Hoffe einer kann mit Helfen.
Hier die Aufgabenstellung:
Schreiben Sie ihr Java-Programm basierend auf folgender Deklaration: int wert = 0x17; (wir haben derzeit noch keine Möglichkeiten zur Dateneingabe) und geben Sie folgendes aus, jeweils in einer Zeile und in der angegeben Reihenfolge:

• das Resultat der Überprüfung der Nutzinformation (Summe der 4 Bits) mit der Prüfziffer als Wahrheitswert (also entweder true oder false, je nachdem ob die Prüfziffer korrekt war oder nicht).

• die berechnete Summe (eine Zahl größer gleich 0)

• der Wert des Paritätsbits (0 oder 1).
 

Hzrfa

Aktives Mitglied
Was funktioniert den nicht? Zeig mal den Code, den du bisher hast und erklär was exakt nicht funktioniert.
Ich komme bei den Punkten nicht weiter und ich weiß nicht wie ich das abgeben soll


•das Resultat der Überprüfung der Nutzinformation (Summe der 4 Bits) mit der Prüfziffer als Wahrheitswert (also entweder true oder false, je nachdem ob die Prüfziffer korrekt war oder nicht).

• die berechnete Summe (eine Zahl größer gleich 0)

• der Wert des Paritätsbits (0 oder 1).
 

LimDul

Top Contributor
So würdest du es auf dem Papier lösen? Wie findest du das Parity Bit per Hand? Wie findest du die Zahl per Hand?
 

LimDul

Top Contributor
Wie berechnest du von Hand 0 oder 1? Wie machst es zu Fuß.

Was ist das Parity Bit bei der Aufgabe
Was ist die Zahl bei der Aufgabe
Nimm ein Blatt Papier und schreib es exakt auf (Oder Word, oder Notepad). Solange du den Weg, wie zum Ergebnis kommst, nicht mal selber mit Papier & Bleistift machen kannst, kannst es auch nicht programmieren.
 

Hzrfa

Aktives Mitglied
Wie berechnest du von Hand 0 oder 1? Wie machst es zu Fuß.

Was ist das Parity Bit bei der Aufgabe
Was ist die Zahl bei der Aufgabe

Nimm ein Blatt Papier und schreib es exakt auf (Oder Word, oder Notepad). Solange du den Weg, wie zum Ergebnis kommst, nicht mal selber mit Papier & Bleistift machen kannst, kannst es auch nicht programmieren
 

Hzrfa

Aktives Mitglied
Wie berechnest du von Hand 0 oder 1? Wie machst es zu Fuß.

Was ist das Parity Bit bei der Aufgabe
Was ist die Zahl bei der Aufgabe

Nimm ein Blatt Papier und schreib es exakt auf (Oder Word, oder Notepad). Solange du den Weg, wie zum Ergebnis kommst, nicht mal selber mit Papier & Bleistift machen kannst, kannst es auch nicht programmieren.
Wenn die prüffziffer 0 ist ist der Wert ungerade
Und wenn es 1 ist es gerade
 

KonradN

Super-Moderator
Mitarbeiter
Wenn die prüffziffer 0 ist ist der Wert ungerade
Und wenn es 1 ist es gerade
Nein, das ist falsch (So Wert der übertragene Wert ist). Dann wäre das Parity Bit ja immer gleich dem Bit an der ersten Stelle. Das kann somit nicht stimmen.

Wenn Dir das Paritybit noch nichts sagt, dann lies erst einmal etwas darüber, so dass du die fachliche Seite verstanden hast:

Grob gesagt: In der binären Darstellung zählst Du die 1er und daraus leitet man dann ein Paritätsbit ab.

Bei Wert 0x17 wäre also die Frage:
a) wie wird der Wert binär dargestellt?
b) wie viele 1er sind in der Darstellung?

Wobei ich gerade noch etwas verwirrt bin - was ist da die "Summe der 4 Bits"? 0x17 ist nicht mit 4 Bits darzustellen. Aber bei dem eigentlichen Verfahren ist das erst einmal nebensächlich.
 

Hzrfa

Aktives Mitglied
Nein, das ist falsch (So Wert der übertragene Wert ist). Dann wäre das Parity Bit ja immer gleich dem Bit an der ersten Stelle. Das kann somit nicht stimmen.

Wenn Dir das Paritybit noch nichts sagt, dann lies erst einmal etwas darüber, so dass du die fachliche Seite verstanden hast:

Grob gesagt: In der binären Darstellung zählst Du die 1er und daraus leitet man dann ein Paritätsbit ab.

Bei Wert 0x17 wäre also die Frage:
a) wie wird der Wert binär dargestellt?
b) wie viele 1er sind in der Darstellung?

Wobei ich gerade noch etwas verwirrt bin - was ist da die "Summe der 4 Bits"? 0x17 ist nicht mit 4 Bits darzustellen. Aber bei dem eigentlichen Verfahren ist das erst einmal nebensächlich.
Bei a weiß ich nicht, da ich das nur mit zahlen gelernt habe und nicht mit x
 

Hzrfa

Aktives Mitglied
Nein, das ist falsch (So Wert der übertragene Wert ist). Dann wäre das Parity Bit ja immer gleich dem Bit an der ersten Stelle. Das kann somit nicht stimmen.

Wenn Dir das Paritybit noch nichts sagt, dann lies erst einmal etwas darüber, so dass du die fachliche Seite verstanden hast:

Grob gesagt: In der binären Darstellung zählst Du die 1er und daraus leitet man dann ein Paritätsbit ab.

Bei Wert 0x17 wäre also die Frage:
a) wie wird der Wert binär dargestellt?
b) wie viele 1er sind in der Darstellung?

Wobei ich gerade noch etwas verwirrt bin - was ist da die "Summe der 4 Bits"? 0x17 ist nicht mit 4 Bits darzustellen. Aber bei dem eigentlichen Verfahren ist das erst einmal nebensächlich.
a) 23
B)10111
 

mihe7

Top Contributor
Das "10111" ist die binäre Darstellung von 0x17 und damit die Antwort auf die Frage a)

Dort sind 4 Einsen enthalten, was die Antwort auf Frage b) gewesen wäre.
 

Hzrfa

Aktives Mitglied
Aha, hier https://www.java-forum.org/thema/paritybit.174974/#post-1104960 ist das auch noch haarklein beschrieben. Im Fall "10111" sind also "1011" die vier Nutzbits und die niederwertigste "1" stellt das Paritätsbit dar. Dort ist auch klar erklärt, dass das Paritätsbit gleich der Quersumme der Nutzbis modulo 2 ist. Wo also liegt nun Dein Problem?
Ich verstehe das nicht.


• das Resultat der Überprüfung der Nutzinformation (Summe der 4 Bits) mit der Prüfziffer als Wahrheitswert (also entweder true oder false, je nachdem ob die Prüfziffer korrekt war oder nicht).

• die berechnete Summe (eine Zahl größer gleich 0)

• der Wert des Paritätsbits (0 oder 1).
 

Hzrfa

Aktives Mitglied

Anhänge

  • 5F4A35C9-B761-4EE6-AAAB-19AFB9EBAA4D.jpeg
    5F4A35C9-B761-4EE6-AAAB-19AFB9EBAA4D.jpeg
    1,3 MB · Aufrufe: 0

KonradN

Super-Moderator
Mitarbeiter
Ich verstehe das nicht.


• das Resultat der Überprüfung der Nutzinformation (Summe der 4 Bits) mit der Prüfziffer als Wahrheitswert (also entweder true oder false, je nachdem ob die Prüfziffer korrekt war oder nicht).

• die berechnete Summe (eine Zahl größer gleich 0)

• der Wert des Paritätsbits (0 oder 1).
Du bringst immer die gleichen Dinge. Das hilft in keiner Weise zu verstehen, was Du nicht verstehst.

"Du hast 4 bits als Nutzinformation und 1 Bit Prüfziffer." Hast Du diesen Punkt verstanden? Das heisst nichts anderes, als dass du 5 Bits hast:
NNNNP - die N sind die Nutzinformationen und die P das Prüfbit.

"die berechnete Summe (eine Zahl größer gleich 0)" - Die Anzahl der 1en der Nutzbits - kannst Du diese zählen? Wenn man also hat
0101 -> Die Anzahl der 1en kannst Du zählen?

"der Wert des Paritätsbits (0 oder 1)." - den kannst Du dann berechnen. Da es nur ein einzelnes Bit ist, kann es nur 1 oder 0 sein.

Und dann etwas zu dem gezeigten Code:
Der Wert soll 0x17 sein. Das lässt sich mit 5 Bits darstellen. Das letzte Bit ist das Paritätsbit. Dieses kann man mit %2 heraus trennen. Schauen wir uns das einmal im Detail an:
0x17 ist 10111 --> Nutzdaten 1011 und Paritätsbit 1
Die Wertigkeit der Stellen von Links nach Rechts sind ja 1, 2, 4, 8, 16 --> Bei allen Stellen außer der ersten wird %2 immer 0 ergeben. Daher bekommt man das erste Bit (das Paritätsbit) mit der %2 Operation.

Wenn der Wert 0x17 korrekt sein soll, dann bedeutet das für die Erstellung:
1011 hat 3 Einser. 3%2 = 1 so dass wir 10111 als Wert mit Paritätsbit bekommen.

Die neue Anzahl der 1er ist also immer gerade:
1001 hätte 2 Einser -> Paritätsbit wäre 0 ==> 10010 wäre der Wert mit Paritätsbit.


Wenn Du das bis hier hin verstanden hast, dann solltest Du wissen, wie man jetzt prüfen kann, ob ein gegebener Wert korrekt ist. Kannst Du das in Worten beschreiben?

Kannst Du mir sagen, ob die folgenden Werte mit Paritätsbit korrekt sind oder falsch?
  • 00001
  • 01100
  • 10101
  • 11110
Und kannst Du mir sagen, wie Du das festgestellt hast?
 

Hzrfa

Aktives Mitglied
Du bringst immer die gleichen Dinge. Das hilft in keiner Weise zu verstehen, was Du nicht verstehst.

"Du hast 4 bits als Nutzinformation und 1 Bit Prüfziffer." Hast Du diesen Punkt verstanden? Das heisst nichts anderes, als dass du 5 Bits hast:
NNNNP - die N sind die Nutzinformationen und die P das Prüfbit.

"die berechnete Summe (eine Zahl größer gleich 0)" - Die Anzahl der 1en der Nutzbits - kannst Du diese zählen? Wenn man also hat
0101 -> Die Anzahl der 1en kannst Du zählen?

"der Wert des Paritätsbits (0 oder 1)." - den kannst Du dann berechnen. Da es nur ein einzelnes Bit ist, kann es nur 1 oder 0 sein.

Und dann etwas zu dem gezeigten Code:
Der Wert soll 0x17 sein. Das lässt sich mit 5 Bits darstellen. Das letzte Bit ist das Paritätsbit. Dieses kann man mit %2 heraus trennen. Schauen wir uns das einmal im Detail an:
0x17 ist 10111 --> Nutzdaten 1011 und Paritätsbit 1
Die Wertigkeit der Stellen von Links nach Rechts sind ja 1, 2, 4, 8, 16 --> Bei allen Stellen außer der ersten wird %2 immer 0 ergeben. Daher bekommt man das erste Bit (das Paritätsbit) mit der %2 Operation.

Wenn der Wert 0x17 korrekt sein soll, dann bedeutet das für die Erstellung:
1011 hat 3 Einser. 3%2 = 1 so dass wir 10111 als Wert mit Paritätsbit bekommen.

Die neue Anzahl der 1er ist also immer gerade:
1001 hätte 2 Einser -> Paritätsbit wäre 0 ==> 10010 wäre der Wert mit Paritätsbit.


Wenn Du das bis hier hin verstanden hast, dann solltest Du wissen, wie man jetzt prüfen kann, ob ein gegebener Wert korrekt ist. Kannst Du das in Worten beschreiben?

Kannst Du mir sagen, ob die folgenden Werte mit Paritätsbit korrekt sind oder falsch?
  • 00001
  • 01100
  • 10101
  • 11110
Und kannst Du mir sagen, wie Du das festgestellt hast?

•00001= 0%2=0 das ergibt dann 00000
•01100= 2%2=0 das ergibt dann 01100
•10101=2%2=0 das ergibt 10100
•11110=2%2=0 das ergibt 11110
 

Hzrfa

Aktives Mitglied
Du bringst immer die gleichen Dinge. Das hilft in keiner Weise zu verstehen, was Du nicht verstehst.

"Du hast 4 bits als Nutzinformation und 1 Bit Prüfziffer." Hast Du diesen Punkt verstanden? Das heisst nichts anderes, als dass du 5 Bits hast:
NNNNP - die N sind die Nutzinformationen und die P das Prüfbit.

"die berechnete Summe (eine Zahl größer gleich 0)" - Die Anzahl der 1en der Nutzbits - kannst Du diese zählen? Wenn man also hat
0101 -> Die Anzahl der 1en kannst Du zählen?

"der Wert des Paritätsbits (0 oder 1)." - den kannst Du dann berechnen. Da es nur ein einzelnes Bit ist, kann es nur 1 oder 0 sein.

Und dann etwas zu dem gezeigten Code:
Der Wert soll 0x17 sein. Das lässt sich mit 5 Bits darstellen. Das letzte Bit ist das Paritätsbit. Dieses kann man mit %2 heraus trennen. Schauen wir uns das einmal im Detail an:
0x17 ist 10111 --> Nutzdaten 1011 und Paritätsbit 1
Die Wertigkeit der Stellen von Links nach Rechts sind ja 1, 2, 4, 8, 16 --> Bei allen Stellen außer der ersten wird %2 immer 0 ergeben. Daher bekommt man das erste Bit (das Paritätsbit) mit der %2 Operation.

Wenn der Wert 0x17 korrekt sein soll, dann bedeutet das für die Erstellung:
1011 hat 3 Einser. 3%2 = 1 so dass wir 10111 als Wert mit Paritätsbit bekommen.

Die neue Anzahl der 1er ist also immer gerade:
1001 hätte 2 Einser -> Paritätsbit wäre 0 ==> 10010 wäre der Wert mit Paritätsbit.


Wenn Du das bis hier hin verstanden hast, dann solltest Du wissen, wie man jetzt prüfen kann, ob ein gegebener Wert korrekt ist. Kannst Du das in Worten beschreiben?

Kannst Du mir sagen, ob die folgenden Werte mit Paritätsbit korrekt sind oder falsch?
  • 00001
  • 01100
  • 10101
  • 11110
Und kannst Du mir sagen, wie Du das festgestellt hast?
Ich hab noch als Hinweis das bekommen.


Ihr Programm soll natürlich nicht nur diesen Testwert bearbeiten können, sondern auch jeden anderen zulässigen Wert! Hinweise:
• Nutzen Sie u.a. geeignete Bitoperationen.
• Wie kann man überprüfen, ob das 0. Bit eines int-Wertes 1 ist oder 0?
• Wenn Sie den Wert eines beliebigen Boolschen Ausdrucks ausgeben, so wird dieser Wert berechnet und entweder true oder false ausgegeben, je nachdem, ob der Wert des Ausdrucks wahr oder falsch war. Zum Beispiel produziert System.out.println(i > 5); die Ausgabe true oder false, abhängig vom Wert der Variablen i.
 

mihe7

Top Contributor
Ich hab noch als Hinweis das bekommen.
Du brauchst erstmal überhaupt keinen Hinweis, denn zunächst solltest Du

https://www.java-forum.org/thema/paritybit.174974/post-1104960 hat gesagt.:
In einer int Variablen wert soll ein (beliebiger) Wert enthalten sein, der aus genau 4 Bit Nutzinformation in den Bits 1-4 besteht und einem zusätzlichen Bit als Prüfziffer im niederwertigsten Bit 0. Der Wert des Prüfbits muss die Quersumme der Bits der Nutzinformation modulo 2 sein, damit die Nutzinformationen als korrekt gewertet wird. Oder anders ausgedrückt: ist die Quersumme der Bits der Nutzinformation eine gerade Zahl, so muss das Prüfbit 0 sein, ansonsten 1.

lesen, verstehen und per Hand ausrechnen können.
 

KonradN

Super-Moderator
Mitarbeiter
•00001= 0%2=0 das ergibt dann 00000
•01100= 2%2=0 das ergibt dann 01100
•10101=2%2=0 das ergibt 10100
•11110=2%2=0 das ergibt 11110
Da erkenne ich noch nicht, dass Du das richtig berechnest. Wie kommst Du auf diese 2%2 bei den einzelnen Werten? Wenn es die Anzahl der Einser sein sollte, dann wäre es 4%2 bei dem letzten Wert.

Gehen wir einmal davon aus, dass Du nun verstanden hast, was da abgeht - dann kann man sich jetzt überlegen, wie man die 1er zählen kann.
Kennst Du eine Möglichkeit, wie Du eine Zahl aufteilen kannst? Du hast ja xxxy als Bits und willst nun einmal xxx haben und das y.
Also als Beispiel:
1001 (9) --> 100 (4) und 1 (1)
1100 (12) -> 110 (6) und 0 (0)

ich habe jeweils die Dezimalzahl in Klammern geschrieben - das hilft ggf. um die Operationen zu sehen / zu finden.
 

Hzrfa

Aktives Mitglied
Da erkenne ich noch nicht, dass Du das richtig berechnest. Wie kommst Du auf diese 2%2 bei den einzelnen Werten? Wenn es die Anzahl der Einser sein sollte, dann wäre es 4%2 bei dem letzten Wert.

Gehen wir einmal davon aus, dass Du nun verstanden hast, was da abgeht - dann kann man sich jetzt überlegen, wie man die 1er zählen kann.
Kennst Du eine Möglichkeit, wie Du eine Zahl aufteilen kannst? Du hast ja xxxy als Bits und willst nun einmal xxx haben und das y.
Also als Beispiel:
1001 (9) --> 100 (4) und 1 (1)
1100 (12) -> 110 (6) und 0 (0)

ich habe jeweils die Dezimalzahl in Klammern geschrieben - das hilft ggf. um die Operationen zu sehen / zu finden.
Wie kommen sie auf die 4?
 

Hzrfa

Aktives Mitglied
Da erkenne ich noch nicht, dass Du das richtig berechnest. Wie kommst Du auf diese 2%2 bei den einzelnen Werten? Wenn es die Anzahl der Einser sein sollte, dann wäre es 4%2 bei dem letzten Wert.

Gehen wir einmal davon aus, dass Du nun verstanden hast, was da abgeht - dann kann man sich jetzt überlegen, wie man die 1er zählen kann.
Kennst Du eine Möglichkeit, wie Du eine Zahl aufteilen kannst? Du hast ja xxxy als Bits und willst nun einmal xxx haben und das y.
Also als Beispiel:
1001 (9) --> 100 (4) und 1 (1)
1100 (12) -> 110 (6) und 0 (0)

ich habe jeweils die Dezimalzahl in Klammern geschrieben - das hilft ggf. um die Operationen zu sehen / zu finden.
Meinen sie das man das in 1 10 100 aufteilt?
 

mihe7

Top Contributor
Hab es ausgerechnet
Aber offensichtlich nicht verstanden.

Der Wert 0x17 besteht aus a) 4 Nutzbits und b) 1 Prüfbit.

Heißt, dass bei 10111 die Nutzbits die ersten vier Bits sind: 1011. Das sind drei Einsen, also beträgt die Quersumme 3. Und 3 modulo 2 ist nun einmal 1. Diese 1 findest Du auch am Ende von 10111, also ist die Prüfzahl korrekt.

Gegenprobe: 10110. Die Quersumme wäre nach wie vor 3, das Prüfbit müsste demnach 1 sein. Tatsächlich findet man aber eine 0 vor -> durchgefallen.
 

Hzrfa

Aktives Mitglied
Aber offensichtlich nicht verstanden.

Der Wert 0x17 besteht aus a) 4 Nutzbits und b) 1 Prüfbit.

Heißt, dass bei 10111 die Nutzbits die ersten vier Bits sind: 1011. Das sind drei Einsen, also beträgt die Quersumme 3. Und 3 modulo 2 ist nun einmal 1. Diese 1 findest Du auch am Ende von 10111, also ist die Prüfzahl korrekt.

Gegenprobe: 10110. Die Quersumme wäre nach wie vor 3, das Prüfbit müsste demnach 1 sein. Tatsächlich findet man aber eine 0 vor -> durchgefallen.
Wo hab ich den 10111 geschrieben?
 

Hzrfa

Aktives Mitglied
Aber offensichtlich nicht verstanden.

Der Wert 0x17 besteht aus a) 4 Nutzbits und b) 1 Prüfbit.

Heißt, dass bei 10111 die Nutzbits die ersten vier Bits sind: 1011. Das sind drei Einsen, also beträgt die Quersumme 3. Und 3 modulo 2 ist nun einmal 1. Diese 1 findest Du auch am Ende von 10111, also ist die Prüfzahl korrekt.

Gegenprobe: 10110. Die Quersumme wäre nach wie vor 3, das Prüfbit müsste demnach 1 sein. Tatsächlich findet man aber eine 0 vor -> durchgefallen.
Ich hab es verstanden
 

mihe7

Top Contributor

KonradN

Super-Moderator
Mitarbeiter
Jetzt solltest Du einmal schauen, wie Du das, was Du im Kopf gemacht hast, im Programm machen kannst.

Wenn man die einzelnen Bits einer Zahl auswerten will, dann kann man z.B. einfach immer das einer bit sozusagen heraus schneiden. Das war ein möglicher Ansatz, den ich in #24 vor Augen hatte.
 

Hzrfa

Aktives Mitglied
Jetzt solltest Du einmal schauen, wie Du das, was Du im Kopf gemacht hast, im Programm machen kannst.

Wenn man die einzelnen Bits einer Zahl auswerten will, dann kann man z.B. einfach immer das einer bit sozusagen heraus schneiden. Das war ein möglicher Ansatz, den ich in #24 vor Augen hatte.
Meinen sie das ich die Bits verschieben soll mit zb >>
 

Hzrfa

Aktives Mitglied

Anhänge

  • image.jpg
    image.jpg
    1,3 MB · Aufrufe: 4

Hzrfa

Aktives Mitglied

mihe7

Top Contributor
Ist das so richtig?
Wenn Du die 4 Nutzbits haben willst, kannst Du den Wert natürlich erstmal um ein Bit nach rechts schieben:
Java:
int nutzwert = wert >>> 1;
Das ist (fast) identisch zu einer ganzzahligen Division durch 2
Java:
int nutzwert = wert / 2;
Das Einerbit eines int x erhältst Du entweder per x % 2 oder per bitweiser UND-Veknüpfung mit 1: x & 1
 

Hzrfa

Aktives Mitglied
Wenn Du die 4 Nutzbits haben willst, kannst Du den Wert natürlich erstmal um ein Bit nach rechts schieben:
Java:
int nutzwert = wert >>> 1;
Das ist (fast) identisch zu einer ganzzahligen Division durch 2
Java:
int nutzwert = wert / 2;
Das Einerbit eines int x erhältst Du entweder per x % 2 oder per bitweiser UND-Veknüpfung mit 1: x & 1
Was ist denn der Nutzwert? Und wieso /2? Ist das was ich gemacht habe falsch
 

mihe7

Top Contributor
Damit habe ich den Wert der Nutzdaten gemeint. Du hast eine Information, die Du z. B. per Modem übertragen möchtest. Sagen wir mal den Wert 8, der binär kodiert 1000 wäre. Die 1000 wären die Nutzdaten, die beim Empfänger letztlich ankommen sollen. Um ein gewisses Maß an Fehlererkennung zu haben, werden diese Nutzdaten nun mit einem Prüfbit versehen. In dem Fall wäre dies nach unserer Rechnung eine 1. Übertragen wird also 10001 und damit 0x11.

Wenn Du also von 10001 die Nutzdaten haben möchtest, musst Du den Spaß um ein Bit nach rechts schieben (das rechte Bit fällt dabei einfach weg). Aus 10001 soll ja wieder 1000 werden, um daraus den originären Wert 8 interpretieren zu können. Das Ergebnis erhältst Du, indem Du 10001 entweder per Bitverschiebung um 1 Bit nach rechts oder indem Du durch 2 dividierst, denn 10001 : 10 = 1000 (alles binär).
 

Hzrfa

Aktives Mitglied
Wenn Du die 4 Nutzbits haben willst, kannst Du den Wert natürlich erstmal um ein Bit nach rechts schieben:
Java:
int nutzwert = wert >>> 1;
Das ist (fast) identisch zu einer ganzzahligen Division durch 2
Java:
int nutzwert = wert / 2;
Das Einerbit eines int x erhältst Du entweder per x % 2 oder per bitweiser UND-Veknüpfung mit 1: x & 1
Aber hier wird es >>>= 3mal verschoben und nicht nur einmal
 

Hzrfa

Aktives Mitglied
Damit habe ich den Wert der Nutzdaten gemeint. Du hast eine Information, die Du z. B. per Modem übertragen möchtest. Sagen wir mal den Wert 8, der binär kodiert 1000 wäre. Die 1000 wären die Nutzdaten, die beim Empfänger letztlich ankommen sollen. Um ein gewisses Maß an Fehlererkennung zu haben, werden diese Nutzdaten nun mit einem Prüfbit versehen. In dem Fall wäre dies nach unserer Rechnung eine 1. Übertragen wird also 10001 und damit 0x11.

Wenn Du also von 10001 die Nutzdaten haben möchtest, musst Du den Spaß um ein Bit nach rechts schieben (das rechte Bit fällt dabei einfach weg). Aus 10001 soll ja wieder 1000 werden, um daraus den originären Wert 8 interpretieren zu können. Das Ergebnis erhältst Du, indem Du 10001 entweder per Bitverschiebung um 1 Bit nach rechts oder indem Du durch 2 dividierst, denn 10001 : 10 = 1000 (alles binär).
Soll ich dann in der Zeile 7 >>> machen? Und ist das mit der Wert & 0x1 richtig?
 

Anhänge

  • E52FF8D0-362E-47CB-ADA7-1F6EDCEB43E1.jpeg
    E52FF8D0-362E-47CB-ADA7-1F6EDCEB43E1.jpeg
    136,1 KB · Aufrufe: 3

mihe7

Top Contributor
Aber hier wird es >>>= 3mal verschoben und nicht nur einmal
Nein. a >>> b bedeutet, dass die Bits aus a (inkl. des Vorzeichenbits) um b Stellen nach rechts verschoben werden.

Soll ich dann in der Zeile 7 >>> machen? Und ist das mit der Wert & 0x1 richtig?
Der Code interessiert erstmal null. Du musst Dir erstmal die Schritte überlegen, die gemacht werden müssen, um die Quersumme der Nutzdaten zu bilden. Die Werkzeuge dazu hast Du spätestens jetzt: >> (oder >>>) verschiebt bitweise nach rechts, ebenso wie die Division durch 2 (hier allerdings um genau 1 Stelle) und mit & 1 oder % 2 kannst Du das Einerbit ermitteln.

Du kannst das auch alles erstmal ohne Java-Operatoren etc. aufschreiben. Umsetzen in Code kommt erst zum Schluss.
 

Hzrfa

Aktives Mitglied
Nein. a >>> b bedeutet, dass die Bits aus a (inkl. des Vorzeichenbits) um b Stellen nach rechts verschoben werden.


Der Code interessiert erstmal null. Du musst Dir erstmal die Schritte überlegen, die gemacht werden müssen, um die Quersumme der Nutzdaten zu bilden. Die Werkzeuge dazu hast Du spätestens jetzt: >> (oder >>>) verschiebt bitweise nach rechts, ebenso wie die Division durch 2 (hier allerdings um genau 1 Stelle) und mit & 1 oder % 2 kannst Du das Einerbit ermitteln.

Du kannst das auch alles erstmal ohne Java-Operatoren etc. aufschreiben. Umsetzen in Code kommt erst zum Schluss.
Wert= wert >>1
Wert= wert %2
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...

Neue Themen


Oben