umrechnen von dezimal in dual

yidaki

Erfahrenes Mitglied
Hallo zusammen!

Ich hab ein kleines Programm geschrieben zum umrechnen von dezimal in dual. Das Ergebnis kommt leider spiegelverkehrt raus.
z.B.
für die Dezimalzahl 16 kommt raus
--> 00001 anstatt
--> 10000 :(

Meine Frage ist nun ob es ne möglichkeit gibt ohne eine forschleife die
Ausgabe an die Richtige position zu bringen.....

Code:
public class Dual 
{ 
   public static void main(String[] args){ 
      int dez = 8; 
      int temp = 0; 
         while (dez > 0){ 
         temp = dez %2; //+ temp;{ 
         dez = dez/2; 
         System.out.print(temp); 
      } 
   } 
}
 
Zuletzt bearbeitet:
Eine Möglichkeit, die sich bis auf den StringBuffer ziemlich an deinen Code hält:
Code:
public class Dual 
{ 
  public static void main(String[] args)
  { 
    int dez = 8; 
    StringBuffer temp = new StringBuffer(); 
    while (dez > 0)
    { 
      temp.insert(0, dez%2); 
      dez = dez/2; 
    } 
    System.out.print(temp);
  } 
}
Peter
 
Hallo!

Code:
public class BinConvertTest {

	private static final double LN2 = Math.log(2);

	public static void main(String[] args) {

		//langsam
		long time = -System.currentTimeMillis();
		for (int i = 0; i < 10000; i++) {
			dez2dual2(i);
			//System.out.println(dez2dual2(i));
		}
		System.out.println("msec: " + (time + System.currentTimeMillis()));

		//schnell
		time = -System.currentTimeMillis();
		for (int i = 0; i < 10000; i++) {
			dez2dual(i);
			//System.out.println(dez2dual(i));
			
		}
		System.out.println("msec: " + (time + System.currentTimeMillis()));

		//Noch schneller
		time = -System.currentTimeMillis();
		for (int i = 0; i < 10000; i++) {
			Integer.toBinaryString(i);
			//System.out.println(Integer.toBinaryString(i));
		}
		System.out.println("msec: " + (time + System.currentTimeMillis()));
	}

	private static String dez2dual2(int i) {
		StringBuffer sb = new StringBuffer(i);

		while (i > 0) {
			sb.insert(0,i%2);
			i /= 2;
		}

		return sb.toString();
	}

	/**
	 * @param i
	 * @return
	 */
	private static String dez2dual(int i) {

		if (i == 0)
			return "0";
		if (i == 1)
			return "1";

		int arraySize = (int) (Math.log(i) / LN2) + 1;

		if (i % 2 == 0) {
			char[] cA = new char[arraySize];
			cA[cA.length - 1] = '1';
			return new String(cA);
		}

		char[] cA = new char[arraySize];

		int j = cA.length;
		while (i > 0) {
			cA[--j] = (char) (48 + (i % 2));
			i /= 2;
		}

		return new String(cA);
	}
}

Ausgabe:
msec: 547
msec: 31
msec: 16

... was lernen wir daraus? String Erzeugungen sind teuer UND "verschwende keine Zeit dir optimierte Versionen für Standardalgorithmen auszudenken, die eh alle schon bestens in der JVM integriert sind (das gilt z.Bsp auch für mathematische Operationen wie Math.sqrt(double d)..."

Gruß Tom
 
Zuletzt bearbeitet:
Original geschrieben von Thomas Darimont
... was lernen wir daraus? String Erzeugungen sind teuer UND "verschwende keine Zeit dir optimierte Versionen für Standardalgorithmen auszudenken, die eh alle schon bestens in der JVM integriert sind (das gilt z.Bsp auch für mathematische Operationen wie Math.sqrt(double d)..."
immer diese Neunmalklugen API-Dokumentations-Leser ;)
 
also ich bin im moment mit was anderem beschäftigt und habs doch noch hinbekommen....

naja aber ich werde mir den code auf jeden fall sobald ich zeit nochmal angucken!

thx

gruß
 
Zurück