Forum: Mikrocontroller und Digitale Elektronik Nibbles tauschen


von Ulf C. (parabol1337)


Lesenswert?

Hi leute

nach lange suchen bin ich immer noch nicht drauf gekommen

wie kann ich mit GCC di Nibbles tauschen

also so

00001111 -> 11110000

an sich  reicht es mir auch so

xxxx1111-> 11110000

gibt es dafür einen routine?


danke schon mal

von Thorsten F. (thorsten)


Lesenswert?

Für den 2. Fall:

 x <<= 4;

von Ulf C. (parabol1337)


Lesenswert?

also

test=0b01011111;
test <<4;

würde in test

11110000 stehen?

von Matthias L. (Gast)


Lesenswert?

>00001111 -> 11110000
1
x = (x>>4);

>00001111 -> 11110000
1
x = (x<<4);

Es werden immer Nullen nachgezogen.

Willst du wirklich tauschen, dann so.
1
x = (x<<4) | (x>>4);

(Der Compiler sollte daraus ein SWAP machen)

von Ulf C. (parabol1337)


Lesenswert?

Hi super danke =)

es funzt

jetzt noch mal kurz ne frage am rande


ich habe in 2 Arrays werte stehen z.b

array(1,3);
x
array(5,5);
=
array(7,1,5);

mathematische operation wäre 13 x 55 =715

wie gehe ich da am besten vor?

array auszählen und dann mit dem 8bit register arbeiten?

von Gast (Gast)


Lesenswert?

Wie würdest du es denn von hand machen?

von Ulf C. (parabol1337)


Lesenswert?

ja ich hätte beide arrays ausgezählt damit das in 2 regsiter steht.
und dann die beiden register multipliziert und wieder aufgeteilt.

von Matthias L. (Gast)


Lesenswert?

>array(1,3);
x
array(5,5);
=
array(7,1,5);

Hä? Das musst du mal genauer erklären...!

von Karl H. (kbuchegg)


Lesenswert?

Matthias Lipinsky wrote:
>>array(1,3);
> x
> array(5,5);
> =
> array(7,1,5);
>
> Hä? Das musst du mal genauer erklären...!

in 'array' steht eine BCD Zahl.

von Karl H. (kbuchegg)


Lesenswert?

Ulf Cramme wrote:
> ja ich hätte beide arrays ausgezählt damit das in 2 regsiter steht.
> und dann die beiden register multipliziert und wieder aufgeteilt.

Falscher Ansatz.
Wie multiplizierst du denn von Hand?

Du fängst bei den niederwertigsten Stellen an und multiplizierst jede 
Stelle mit jeder, wobei du einen Übertrag mitschleifst. Und zum Schluss 
werden die einzelnen Teilsummen geeignet versetzt (also mit 10 
multipliziert) zusammengezählt. Erinnere dich einfach mal daran, wie du 
das in der Grundschule gelernt hast.

Und genau dasselbe ahmst du jetzt mit einem Programm nach.

  13 * 57

                    5 * 3 macht 15, also 5 anschreiben und 1 Übertrag
                    5 * 1 macht 5 plus die 1 Übertrag mach 6

                    7 * 3 macht 21, 1 anschreiben, 2 Übertrag
                    7 * 1 macht 7, plus die 2 Übertrag macht 9


  13 * 57
 ---------
  65
   91

                   650 + 91 macht 741
 -----
  741

13 * 57 -> 741

von Ulf C. (parabol1337)


Lesenswert?

ahhh =) hätte man auch drauf kommen können

danke danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.