Hallo an alle!
Ich habe ein 2x2 Array von BigInteger-Variablen, die in Basis 2 geschrieben wurden, mit 4 Bits, also bspw. "1100".
Diese 4 BigInteger-Werte müssen "transformiert" werden, gemäß dieser Logik:
a = b_1
b = b_0 + b_3
c = b_3 + b_2
d = b_2
Beispiel:
Ich habe
klassenvariable_test[1][0] = 1100
-> Somit entspricht
b_0 = 0
b_1 = 0
b_2 = 1
b_3 = 1
->
a = b_1 = 0
b = b_0 + b_3 = 0 + 1 = 1
c = b_3 + b_2 = 1 + 1 = 0
d = b_2 = 0
-> Überschreiben des bisherigen Werts im Array:
klassenvariable_test[1][0] = "0100" (a, b, c, d)
Meine Variante scheint mir da relativ "aufwändig" zu sein (zumal sie auch nicht funktioniert, dazu weiter unten).
Wie kann man denn das geschickter realisieren?
Hier der Teil der fehlschlägt. Es erscheint "Ausgabe", die eigentlich nicht erscheinen sollte. Ich will 1001 mit 0010 UND verknüpfen, das Ergebnis sollte 0000 lauten und also nicht != new BigInteger("0000", 2) sein und somit nicht in die Bedingung hineinspringen. Tut es aber, und mir ist unklar wieso.
Hat jemand eine Idee wieso diese Bedingung erfüllt wird? Und wie man das geschickter realisieren könnte?
Danke + Gruß PHANTOMIAS
Ich habe ein 2x2 Array von BigInteger-Variablen, die in Basis 2 geschrieben wurden, mit 4 Bits, also bspw. "1100".
Diese 4 BigInteger-Werte müssen "transformiert" werden, gemäß dieser Logik:
a = b_1
b = b_0 + b_3
c = b_3 + b_2
d = b_2
Beispiel:
Ich habe
klassenvariable_test[1][0] = 1100
-> Somit entspricht
b_0 = 0
b_1 = 0
b_2 = 1
b_3 = 1
->
a = b_1 = 0
b = b_0 + b_3 = 0 + 1 = 1
c = b_3 + b_2 = 1 + 1 = 0
d = b_2 = 0
-> Überschreiben des bisherigen Werts im Array:
klassenvariable_test[1][0] = "0100" (a, b, c, d)
Meine Variante scheint mir da relativ "aufwändig" zu sein (zumal sie auch nicht funktioniert, dazu weiter unten).
Wie kann man denn das geschickter realisieren?
Java:
BigInteger newOne = new BigInteger("0", 2);
boolean b0 = false, b1 = false, b2 = false, b3 = false;
// b0
if(klassenvariable_test[1][0].and(new BigInteger("0001", 2)) != new BigInteger("0000")) {
b0 = true;
}
if(klassenvariable_test[1][0].and(new BigInteger("0010", 2)) != new BigInteger("0000")) {
b1 = true;
}
if(klassenvariable_test[1][0].and(new BigInteger("0100", 2)) != new BigInteger("0000")) {
b2 = true;
}
if(klassenvariable_test[1][0].and(new BigInteger("1000", 2)) != new BigInteger("0000")) {
b3 = true;
}
if (b1) {
newOne.setBit(3);
}
if (b0 ^ b3) {
newOne.setBit(2);
}
if (b3 ^ b2) {
newOne.setBit(1);
}
if (b2) {
newOne.setBit(0);
}
Hier der Teil der fehlschlägt. Es erscheint "Ausgabe", die eigentlich nicht erscheinen sollte. Ich will 1001 mit 0010 UND verknüpfen, das Ergebnis sollte 0000 lauten und also nicht != new BigInteger("0000", 2) sein und somit nicht in die Bedingung hineinspringen. Tut es aber, und mir ist unklar wieso.
Java:
if((new BigInteger("1001", 2)).and(new BigInteger("0010", 2)) != new BigInteger("0000", 2)) {
System.out.println("Ausgabe");
}
Hat jemand eine Idee wieso diese Bedingung erfüllt wird? Und wie man das geschickter realisieren könnte?
Danke + Gruß PHANTOMIAS