Bitweise Operatoren und Binär-string-Bewertungen
Ich eine Aufgabe haben, wo ich konvertieren von hexadezimal-in eine 16-bit-Binär-string und vergleicht dann zwei dieser bitweise Operatoren verwenden. Ich habe eine for-Schleife, die ausgeführt wird a.charAt[i]
& b.charAt[i]
einen string builder-string. Nun, ich erwarte, dass die Ausgabe eine binäre Zahl, aber ich habe mich zu einem Punkt, wo jedes mal, wenn diese Zeile ausgeführt wird, es gibt mir zahlen, die nicht 0 oder 1. Und es gibt mir 2 zahlen (2 und 3). Was mache ich falsch?
Code:
int bin = 0;
hex = hex.replaceFirst("0x", "");
bin = Integer.parseInt(hex, 16);
hex = String.format("%16s", Integer.toBinaryString(bin));
return hex;
Die zwei hexadezimal ich versuche zu bewerten sind FFF7
und 0001
. Ich habe erfolgreich konvertiert Sie in binäre Zeichenfolgen. Auch ich weiß nicht warum, aber die vorhergehenden Nullen werden nicht angezeigt, nur die Leerzeichen :/
Habe ich online geschaut ausgiebig für Stunden und kann nicht scheinen, um das problem zu finden ich habe.
- Sollten Sie auch Ihren code. Es hilft.
- Binäre Operationen wie
&
arbeiten auf allen bits der beiden zahlen auf einmal, nicht auf Ihre einzelnen bits. Deshalb ist das Ergebnisx & y
kann etwas, das andere als0
oder1
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nehme an, Sie wollen bitweise UND-Verknüpfung von zwei 16-bit-big-endian -, hexadezimal-zahlen zusammen und zeigt das Ergebnis als binäre.
Wie schon andere gesagt haben, mit zahlen anstatt strings würde Ihr Leben leichter machen - es sei denn, dies ist eine Einschränkung der Zuordnung?
Wenn ich waren gerade dabei, diese Aufgabe, mit meinen Annahmen, und so wie ich es verstehe, würde ich:
0x8000
bis zum und einschließlich0x0001
:&
die entsprechenden bitsStringBuilder
StringBuilder
Schritt durch die entsprechenden bits jeder Zahl, die ich benutzen würde bit Maskierung und bit-shifting.
N. B.
0x8000
ist das oberste bit eines 16-bit-Zahl.Alternative ist, dass Java zu tun die viel, aber dies kann nicht der Punkt sein, der deine Aufgabe:
Diese drucken:
Ich hoffe das hilft in irgendeiner Weise, und dass ich nicht allzu weit daneben mit meinen Annahmen. Viel Glück!
Ich denke, Sie sollten sich auf Integer.parseInt() konvertieren Sie Ihre hexadezimalen strings in Ganzzahlen. Sobald Sie haben eine numerische Darstellung dann Ihre binären Operationen wird viel einfacher sein.
Wenn Sie wirklich benötigen ein string Binär Darstellung, check-out Integer.toBinaryString()
sb.append((char) Integer.parseInt(n, 16)));