zu blöd zum rechnen

JanHH

Top Contributor
Hallo,

brauch mal nachhilfe..

hab drei Zahlen:

a: byte
b: short
c: int

diese sollen nun binär dargestellt werden:

- acht nullen
- dann acht bit für a
- dann 16 bit für b
- dann 32 bit für c

so das man dann 64 bit (=1 long) hat.

Variante 1: Alles in einen String konvertieren und dann parsen (ich weiss der Code ist mist, ist ja auch nur rumprobieren)

Java:
		String b_a=Integer.toBinaryString(a);
		String b_b=Integer.toBinaryString(b);
		String b_c=Integer.toBinaryString(c);
		
		while(b_a.length()<8)
			b_a="0"+b_pid;

		while(b_b.length()<16)
			b_b="0"+b_vid;

		while(b_c.length()<32)
			b_c="0"+b_cid;

		String b_s="00000000"+b_a+b_b+b_c;
		long l=Long.parseLong(b_s, 2);

Der String (b_s) sieht übrigens RICHTIG aus.

Variante 2, etwas simpler und an sich korrekt: c+(b*(2^32))+(a*(2^48))

Aber bei beiden Varianten kommen unterschiedliche Werte raus!!!! Heul.

Warum, und was tun?
 
T

tröööt

Gast
beachte zahlensysteme !

binär : XXXXXXXXb
oktal : 0XXXXXXXX
deziaml : XXXXXXXX
hexadezimal : 0xXXXXXXXX

eine FÜHRENDE 0 leitet einen OKTAL-zahl ein ...
 
S

Spacerat

Gast
Variante 3: BitShifts!
Dann das ganze noch auf Long-Basis berechnen und die vorderen 8 Bit löschen. Ausserdem: Denkst du auch an die N-Flag-Extension beim casten der Werte? Mit BitShifts wär das nicht passiert... ;)
 

JanHH

Top Contributor
Hm, Rätsel gelöst, man muss das alles hier und da noch nach long casten, dann gehts.

Uff, so viel Aufwand für sowas banales ;-).


long pow32=4294967296L;
long pow48=281474976710656L;

long id=(((long)a)*pow48)+(((long)b)*pow32)+(long)c;
 
Zuletzt bearbeitet:
S

Spacerat

Gast
Na wenn das die Lösung ist...
Trotzdem liefert [c](long) (-1 * pow32)[/c] immer noch negative Longs, weil du die N-Flag-Expansion (Expansion ist das richtige Wort ;)) nicht verhinderst. Dem folgende Additionen ändern an diesem Umstand evtl. nur zufällig was und die 8 führenden Bits werden 1 und nicht 0.
es müsste also etwa so aussehen:
long lA = a & 0xFF
long lB = b & 0xFFFF
long lC = c & 0xFFFFFFFFL (das L an dieser Stelle ist unheimlich wichtig)

nun kann man explizit positive Werte multiplizieren (so wie du es gemacht hast) oder...

long id = (lA << 48) | (lB << 32) | lC
 

KSG9|sebastian

Top Contributor
Bitshift sieht ur im ersten Moment "komisch" aus.
Zur Verdeutlichung mach einfach ein paar Schritte von Hand auf Papier, dann wird sofort klar wie es funktioniert.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V ArrayList ist nicht generic!?? Oder bin ich blöd? Allgemeine Java-Themen 2
JAnruVA Datentypen Berechneten String-Wert in Double umwandeln um weiter zu rechnen Allgemeine Java-Themen 7
Mikejr Recursion mit Zinseszins rechnen Allgemeine Java-Themen 20
B Parameter Konstruktor plus rechnen Allgemeine Java-Themen 6
P Rechnen mit sehr kleinen Zahlen Allgemeine Java-Themen 5
KeexZDeveoper Schnelleres Rechnen Allgemeine Java-Themen 8
J-Gallus Erste Schritte Wahrscheinlich Anfänger Fehler beim rechnen. Falsches Ergebnis. Allgemeine Java-Themen 9
A Mit dem letzten bis zum ersten Wert aus Array rechnen Allgemeine Java-Themen 15
M Probleme beim rechnen, bei Zahlen mit führenden Nullen. Allgemeine Java-Themen 7
F Taschenrechner Term rechnen Allgemeine Java-Themen 4
S Java rechnen mit unbekannten Allgemeine Java-Themen 11
M Rechnen mit kleinen Zahlen langsamer!? Allgemeine Java-Themen 11
B Fehler beim Rechnen mit Floats Allgemeine Java-Themen 3
B Rechnen mit mehreren Variablen Allgemeine Java-Themen 2
M In einer Tabelle rechnen Allgemeine Java-Themen 12
H Mit String rechnen Allgemeine Java-Themen 14
hdi Probleme beim Rechnen mit BigDecimal Allgemeine Java-Themen 5
E Konstante Zahl Threads parallel rechnen lassen Allgemeine Java-Themen 6
O "Rechnen" mit Farben Allgemeine Java-Themen 12
T Mit Datum und Zeit rechnen Allgemeine Java-Themen 8
M Rechnen mit sehr kleinen Zahlen Allgemeine Java-Themen 8
G Probleme mir Rechnen Allgemeine Java-Themen 5
P rechnen mit extrem grossen zahlen Allgemeine Java-Themen 2
H Komplexes Rechnen mit Java Allgemeine Java-Themen 6
S Rechnen mit float Zahlen Allgemeine Java-Themen 2
O Java zu blöde um 1-1 zu rechnen?? Allgemeine Java-Themen 20

Ähnliche Java Themen


Oben