binärrepresentation "ausplitten"
bleicher
- programmiertechnik
0 Cheatah0 danke
bleicher0 Pole
0 Blaubart0 Vinzenz Mai0 bleicher
Grüße,
nicht, dass es wichtig wäre, aber ich habe mir so eine rätsel gestellt
gegeben sind 4 "zeiger"/lämpchen
ich will die zum darstellen des binären zählens nutzen, sodas ich mit der eingabe der variable i aus [0,15] die einzelnen werte für L1 - L4 habe
ich dachte an binäre vergleiche der C-Sprache der form (i & 1) (i & 2) (i & 4) (i & 8) aber das ist etwas "unsauber"
wer kennt eine schönere lösung?
MFG
bleicher
Hi,
wer kennt eine schönere lösung?
geh die Lämpchen in einer Schleife durch und vergleiche mit dem Überlauf eines Bitshift nach rechts.
Cheatah
Grüße,
geh die Lämpchen in einer Schleife durch und vergleiche mit dem Überlauf eines Bitshift nach rechts.
danke ^^ einfach wie alles geniale
warum habe ich daran bloß nicht gedacht xD
MFG
bleicher
Hallo,
geh die Lämpchen in einer Schleife durch und vergleiche mit dem Überlauf eines Bitshift nach rechts.
das klingt hochinteressant! Könntet ihr mir ein Beispiel zeigen? Ich würde mich gerne etwas mit Bitoperationen beschäftigen. Könnte man das z.b. auch mit JavaScript machen? Oder eventuell ein PHP-Beispiel. Das wäre sehr nett!
das klingt hochinteressant! Könntet ihr mir ein Beispiel zeigen? Ich würde mich gerne etwas mit Bitoperationen beschäftigen. Könnte man das z.b. auch mit JavaScript machen? Oder eventuell ein PHP-Beispiel. Das wäre sehr nett!
Pseudocode:
$x = 0001011b
while ($x != 0) {
if ($x[0] == 1) {
lampe_an
} else {
lampe_aus
}
shift_right($x) //für die Abfrage des Überlaufs fällt mit jetzt kein Befehl ein, daher das if ($x[0] == 1)
}
Oder was meinst Du?
Mehr?
das klingt hochinteressant! Könntet ihr mir ein Beispiel zeigen? Ich würde mich gerne etwas mit Bitoperationen beschäftigen. Könnte man das z.b. auch mit JavaScript machen? Oder eventuell ein PHP-Beispiel. Das wäre sehr nett!
Pseudocode:
$x = 0001011b
while ($x != 0) {
if ($x[0] == 1) {
lampe_an
} else {
lampe_aus
}
shift_right($x) //für die Abfrage des Überlaufs fällt mit jetzt kein Befehl ein, daher das if ($x[0] == 1)
}Oder was meinst Du?
- Schiebeoperationen über ein Bit entsprechen auch der Division oder Multiplikation (Überlauf beachten) mit 2.
- mit and 0 kann man Bits löschen
- mit or 1 kann man Bits setzen
Huch, das kapiere ich nicht. Was ist denn "Überlauf"?
Was ist "0001011b"?
Na ja, ist mir zu kompliziert, muss erstmal die Grundlagen dazu erlernen. vorher hat das keinen Sinn, schätze ich.
Danke
ein Pole
Hi,
- Schiebeoperationen über ein Bit entsprechen auch der Division oder Multiplikation (Überlauf beachten) mit 2.
- mit and 0 kann man Bits löschen
- mit or 1 kann man Bits setzen
Huch, das kapiere ich nicht. Was ist denn "Überlauf"?
das, was rechts raus fällt, wenn man die Bits verschiebt.
Was ist "0001011b"?
Das "b" sagt, dass es sich um Binärdaten handelt - also um Bits. Diese lauten "0001011".
Na ja, ist mir zu kompliziert, muss erstmal die Grundlagen dazu erlernen. vorher hat das keinen Sinn, schätze ich.
Da stimme ich Dir zu. Glücklicherweise sind die Grundlagen nicht so schwer ;-) und beginnen beim Zahlensystem. Hängen wir an Dezimalzahlen mal ein "d" und an Binärzahlen ein "b" an, dann haben wir:
1d = 1b
2d = 10b
3d = 11b
4d = 100b
5d = 101b
6d = 110b
7d = 111b
8d = 1000b
usw., links können optionale Nullen angefügt werden (1b = 0001b). Jetzt beginnst Du, die Bits nach rechts zu schieben - was effektiv bedeutet, sie durch 2 zu teilen. Ein eventueller Rest dieser Division ist das, was oben als Überlauf bezeichnet wurde.
Cheatah
Grüße,
minimal praktischer fand ich shift nach rechts, der linksshift ist komplexer in der umsetzung,
so werde ich das benutzen können
for(i=0;i<16;i++){
//
if(i%2) str[3]=1; else str[3]=0;
if(i>>1) str[2]=1; else str[2]=0;
if(i>>2) str[1]=1; else str[1]=0;
if(i>>3) str[0]=1; else str[0]=0;
std::cout<<i<<" "<<str[0]<<str[1]<<str[2]<<str[3]<<endl;
}
MFG
bleicher
Tach.
ich will die zum darstellen des binären zählens nutzen, sodas ich mit der eingabe der variable i aus [0,15] die einzelnen werte für L1 - L4 habe
ich dachte an binäre vergleiche der C-Sprache der form (i & 1) (i & 2) (i & 4) (i & 8) aber das ist etwas "unsauber"
Was ist daran unsauber? Und wieso ist dieses Rumgeschiebe der Bits in Deinen Augen besser?
Hallo,
ich will die zum darstellen des binären zählens nutzen, sodas ich mit der eingabe der variable i aus [0,15] die einzelnen werte für L1 - L4 habe
ich dachte an binäre vergleiche der C-Sprache der form (i & 1) (i & 2) (i & 4) (i & 8) aber das ist etwas "unsauber"
Was ist daran unsauber? Und wieso ist dieses Rumgeschiebe der Bits in Deinen Augen besser?
Das kann ich zwar auch nicht nachvollziehen, aber ich nähme sprintf() mit %b (siehe auch Beispiel 5) ...
Eine Vielzahl von gebräuchlichen Programmiersprachen bietet solche Ausgabefunktionen.
Freundliche Grüße
Vinzenz
Grüße,
bitverschibung ist schleifentauglich und anpassbar an die stellenzahl und eine binärausgabe als string wird mir nich helfen, weil ich die werte zum anstuern externen elemnte brauche ;)
zudem kann c das anscheinend nicht auf anhieb und ich sowieso nicht so viele bibliotheken mitnehmen kann, auf die 32kb.
MFG
bleicher