# Potenzzahlen mit shiftLeft berechnen?



## Iron Monkey (17. Jun 2009)

Hi!

Ich spiele nur gerade ein bisschen rum, wie man z.B. 3² = 9 mit shiftLeft ( << ) berechnet!

Ich weiss, dass man mit Math.pow( ... ) berechnen kann, aber ich will nur wissen, wie das mit shiftLeft funktioniert! 

Bei 2² = 4 kann ich ja so berechnen: 1 << [Exponent] also 1 << 2 --> 4

Wie funktioniert das bei 3² = 9 ???
Das Ergebnis in Bit muss ja so aussehen: 0000 1001 --> 9

Gruß
Iron Monkey


----------



## mr-gurke (17. Jun 2009)

Gar nicht.
Shiften auf Bitebene funktioniert nur mit 2^x, da der Rechner im Binärsystem arbeitet.
Im Dezimalsystem, mit dem wir rechnen, funktioniert das shiften mit 10^x.
Um das wie in deinem Beispiel mit 3^x zu machen musst du erstmal einen Rechner entwickeln, der mit einem Ternärsystem rechnet. Könnte ganz interessant sein


----------



## SlaterB (17. Jun 2009)

das muss ja kein neuer Rechner sein, kann man auch in Software simulieren

new Ternärzahl("02210201021").shift(3);


----------



## Iron Monkey (17. Jun 2009)

mr-gurke hat gesagt.:


> Gar nicht.
> Shiften auf Bitebene funktioniert nur mit 2^x, da der Rechner im Binärsystem arbeitet.
> Im Dezimalsystem, mit dem wir rechnen, funktioniert das shiften mit 10^x.
> Um das wie in deinem Beispiel mit 3^x zu machen musst du erstmal einen Rechner entwickeln, der mit einem Ternärsystem rechnet. Könnte ganz interessant sein



Hehe, ok, ich werde einen neuen Super-Rechner entwickeln! 

Habe ich mir auch gedacht, dass es überhaupt nicht möglich ist. Grund: Binärsystem!

Gruß
Iron Monkey


----------



## Iron Monkey (17. Jun 2009)

SlaterB hat gesagt.:


> das muss ja kein neuer Rechner sein, kann man auch in Software simulieren
> 
> new Ternärzahl("02210201021").shift(3);



Was bedeutet diese Zahl: 02210201021 ???

Gruß
Iron Monkey


----------



## bygones (17. Jun 2009)

Iron Monkey hat gesagt.:


> Was bedeutet diese Zahl: 02210201021 ???
> 
> Gruß
> Iron Monkey


Ternaersystem wie gesagt wurde... statt 010111 - also Zahlendarstellung durch 0,1 hat man 0,1,2


----------



## Iron Monkey (17. Jun 2009)

Achso, jetzt habe ich verstanden! Alles klar, danke!

Werde jetzt eine eigene Klasse implementieren!

Gruß
Iron Monkey


----------



## Iron Monkey (18. Jun 2009)

Hi an alle!

OK, ich habe soweit eine Klasse geschrieben! Jetzt möchte ich eine weitere Methode für die "balanzierte Ternärdarstellung" einbauen. Wie man das rechnet, weiss ich das wohl, aber das Problem für die Ausgabe ist, dass ich nicht weiss, welches Zeichen ich für -1 zurückgebe!

Beispiel:

Dezimal: 16
Binär: 10000
Ternär: 121
Ternär (balanciert): 1*11*1 --> Fettdruck bedeutet: Negativ

Es geht mir auch darum, dass der Anwender auch eine Möglichkeit hat, per getBalanceTernaerToDecimal( String bTernaer ); zu verwenden. Im Parameter kann er ja nicht so schreiben: "1(-1)(-1)1"

Gruß
Iron Monkey


----------



## SlaterB (18. Jun 2009)

gibt es denn eine 'balanzierte Binärdarstellung' oder hast du dir das komplett ausgedacht?
wie wärs mit dem Minus-Zeichen oder Buchstaben a-z?


----------



## SchonWiederFred (18. Jun 2009)

Iron Monkey hat gesagt.:


> Ich spiele nur gerade ein bisschen rum, wie man z.B. 3² = 9 mit shiftLeft ( << ) berechnet!


Wozu Shiften? Geht auch einfacher.

```
public static int quadriere(int x)
{
	return x * x;
}
```


----------



## Iron Monkey (18. Jun 2009)

SlaterB hat gesagt.:


> eine 'balanzierte Binärdarstellung' oder hast du dir das komplett ausgedacht?



"balanzierte Binärdarstellung" gibt es nicht, sondern es soll "balanzierte Ternärdarstellung" heissen! 

Ternärsystem

Danke für den Tipp!

Gruß
Iron Monkey


----------



## Iron Monkey (18. Jun 2009)

SchonWiederFred hat gesagt.:


> Wozu Shiften? Geht auch einfacher.
> 
> ```
> public static int quadriere(int x)
> ...



Man kann auch mit Math.pow( basis, exponent ); benutzen! Es ist natürlich noch einfacher und man kann auch anderes Exponent eingeben! 

Aber mir geht es nur darum, wie das mit dem Shiften funktioniert. Probieren geht über Studieren! 

Zu deinem Beispiel ist aber nur für das Quadrieren, d.h. alle Zahlen mit Hoch 2 rechnen, z.B.: 25^2, usw.!

Gruß
Iron Monkey


----------



## Landei (18. Jun 2009)

Balancierte Ternärzahlen schreibe ich immer mit +,0 und -. Sieht erstmal komisch aus, ist aber eigentlich logisch.


----------



## Iron Monkey (19. Jun 2009)

Hi Landei!

OK, das kann man auch machen!

Ich will jetzt von der balancierten Ternärdarstellung zu Ternär umrechnen.
Jetzt habe ich aber ein Problem mit der Berechnung, z.B.

[ 0 = 0, X = 1, Y = 2 ]
für 57 -> XY0X0 -> 12010

12010 + 11111 = 120121 und dann 120121 - 11111 = *002010* --> Das ist die Lösung für die Ternärdarstellung

Wie kann man sowas in der Methode mit 2 Variablen tritweise mit Übertrag berechnen? Da habe ich keine Idee! 

Gruß
Iron Monkey


----------

