Forum: Mikrocontroller und Digitale Elektronik Byte Variablen solle NICHT addiert werden, wie geht das? BASCOM BASIC


von Stefan (Gast)


Lesenswert?

Hallo,

Ich hoffe ihr könnt mir helfen. Habe drei Variablen, test1, test2, test3 
alles byte variablen


Nun habe ich folgenden code:

Test2=2
Test3=3

Test1=test2+test3


Die variable test1 hat nun den inhalt 5 was ja auch richtig ist, gibt es 
aber auch eine möglichkeit das die zahlen NICHT Addiert werden und so 
der inhalt 23 wäre?

von Osche R. (Gast)


Lesenswert?

Test1 = 10*Test2 + Test3

von Stefan (Gast)


Lesenswert?

Danke für deine antwort

Aber das wäre ja wieder rechnen weil 10*2 sind 20  + 3 sind 23 das ist 
zwar das ergebniss was ich haben will, aber das war ja nur ein beispiel, 
davon abgesehen das bascom nur eine operation pro zeile kann :(

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

23 ist nur ein Beispiel? Und wie sehen die anderen Beispiele aus? WAS 
ist das eigentliche Problem?

Die Zahlen 2 und 3 nicht zu Addieren und 23 zu bekommen, das ginge auch 
so:
Test1 = 23

von Ich (Gast)


Lesenswert?

*These*: Stringverkettung

von Karl H. (kbuchegg)


Lesenswert?

Stefan schrieb:
> Danke für deine antwort
>
> Aber das wäre ja wieder rechnen

Ja, so ist das nun mal.

Was dir vorschwebt geht nur in einem Sonderfall, nämlich wenn du binär 
arbeitest. Dann dann kann man die Multiplikation durch eine 
Schiebeoperation ersetzen. Was für uns im Dezimalsystem besonders leicht 
ist, ist für einen Computer, der nicht mit dem Dezimalsystem arbeitet 
ein Kraftakt.

Aber keine Sorge. Denn wenn Computer etwas richtig gut können, dann ist 
das rechnen. Die können das auf jeden Fall viel schneller als wir 
Menschen.

von Stefan (Gast)


Lesenswert?

vielelicht habe ich mich unverständlich ausgedrückt


in variable test2 und test3 werden zahlen geschrieben zwischen 1 und 9

beide variablen sollen dann in varibale test1 geschrieben werden dabei 
aber eben nicht addiert werdenn, hier ien paar beispiele wie es aussehen 
sollte:


test2=3
test3=1


dann soll in test1 31

oder


test2=9
test3=6


dann soll in test1 96


wüsste nicht wie ich das sonst beschreiben soll :(

von Ich (Gast)


Lesenswert?

Test1 = 10*Test2 + Test3
würde immer noch auf jedes deiner Beispiele passen ...

von Karl H. (kbuchegg)


Lesenswert?

Stefan schrieb:

> wüsste nicht wie ich das sonst beschreiben soll :(


und selbst wenn deine beiden Einzelstellen 7 und 2 lauten, gilt immer 
noch, dass

  7 * 10   +   2

die 72 ergeben, die du suchst.

Da steckt eine tiefere Erkentnis dahinter: Genau so ist nämlich unser 
Zahlensystem aufgebaut. Genau darum nennen wir die eine Stelle einer 2 
stelligen Zahl die 'Zehner' und die andere die 'Einer'. WEil sich 
nämlich eine 2 stellige Zahl immer nach dem Muster

     Zehner * 10  +  Einer * 1

aufbaut.

In 83 ist 8 die Zehner-Stelle und 3 die Einer-Stelle. Eben weil

    8 * 10   +   3 * 1

die 83 ergeben.

Und in einer 3-stelligen Zahl heisst die 3.te Stelle die 'Hunderter', 
weil gilt

     Zahl = Hunderter * 100    +   Zehner * 10    +    Einer * 1


564 = 5 * 100  +  6 * 10  +  4 * 1

und wenn man das ein bischen anders aufschreibt

       564  =    5    * 100
               + 6    *  10
               + 4    *   1

dann fällt da was auf. Die Wertigkeit jeder weiteren Stelle links, nimmt 
immer um das 10-fache zu. Die Ziffern 0 bis 9 sind immer dieselben, aber 
je nach dem an welcher Stelle der Zahl die Ziffern auftauchen haben sie 
eine andere Wertigkeit (1, 10, 100, ...)
Und genau deshalb heißt unser System das Dezimalsystem. Denn Dezimal 
kommt aus dem Latein, decem. Und rate mal was das im ollen Latein heißt? 
Genau. Zehn.
Und es ist ein Stellenwertsystem, weil die Wertigkeit einer Ziffer davon 
abhängt, wo in der Zahl (an welcher Stelle) sie auftaucht.



Und warum wir die nächste Stelle die 'Tausender' nennen, nun das sollte 
jetzt nicht mehr schwer sein :-)


Das ist das System, das wir Menschen verwenden. Hauptsächlich aus 
historischen Gründen. Für uns ist die 10 irgendwie eine 'magische' Zahl. 
Wir haben 10 Finger, wir haben 10 Zehen.

Aber ein Computer verwendet ein Dualsystem (oder Binärsystem). Das was 
für uns die 10 ist, ist für einen Computer die 2 (Latein: duo = zwei). 
10 ist aber keine ganze 2-er Potenz. Daher funktioniert das, was im 
10-er System so leicht aussieht, nämlich das Bilden einer Zahl indem man 
die einzelnen Ziffern einfach aneinanderhängt, im 2-er System nicht 
(bzw. ist das Ergebnis eben ein anderes als im 10-er System). Und 
umgekehrt.

von Patrick (Gast)


Lesenswert?

Stefan: Bitte lies Dich einmal in das Thema "Zahlendarstellung" ein. Wie 
von Karl-Heinz bereits ausgeführt, ist das, was Du suchst, mit 
Dezimalzahlen auf einem (binären) Computersystem nicht machbar.

Mit Binärzahlen ginge es; z. B.: 0110 und 1100 können miteinander 
verknüpft werden durch Nach-Links-Verschieben des ersten Nibbles um vier 
Stellen und anschließende bitweise ODER-Verknüpfung (bzw. Addition).

Auch mit Strings funktioniert es auf höherer Abstraktionsebene, z. B. 
können die Strings "a" und "b" zu "ab" verknüpft werden. Auf 
Maschinensprache-Ebene entspricht das jedoch dem Aneinanderhängen von 
zwei Bytes im Speicherbereich (d. h. Umkopieren).

Jetzt wird es interessant: Der Buchstabe "a" entspricht dem ASCII-Code 
97 im Dezimalsystem und somit dem Wert 01100001 im Binärsystem - das ist 
letztendlich das, was im Speicher abgelegt ist. Ob nun der 
Speicherinhalt "01100001" als Integerzahl oder als (Teil eines) String 
interpretiert wird, hängt vom Programm ab - der Mikrocontroller weiß es 
zunächst einmal nicht; es wird festgelegt durch die Programmierung bzw. 
was das Programm damit macht.

von H.Joachim S. (crazyhorse)


Lesenswert?

Vielleicht soll es BCD-Darstellung werden?
Das wäre dann:
test2*16 + test3;
bzw: test2<<4 | test3; //rein logisch ohne zu "rechnen" ;-)

von kkk (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Denn wenn Computer etwas richtig gut können, dann ist
> das rechnen.

Klar, denn mein China 10 Cent Rechner macht aus 1/999999*999999=0.99997 
ob da die Sattelitenverbindung zu den Abakuschinesen der Firma 'nen 
Übertragungsfehler hat ?

von Hmm (Gast)


Lesenswert?

Was uns zu der Frage führt, was in aller Welt Dich hat annehmen lassen, 
das das Ding ein Rechner ist?
Weiter: Was lässt Dich annehmen, das etwas, worauf ein Chinese Rechner 
schreibt tatsächlich ein Rechner ist?

Mit dem gleichen Recht könnte ich eine auf Papier gemalte "Null" als 
Rechner bezeichnen. Es kann absolut jede Zahl, ob integer, real, oder 
komplex mit Null multiplizieren und das ohne jeden Fehler.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

H.joachim Seifert schrieb:
> Vielleicht soll es BCD-Darstellung werden?
Dann sollte es aber nicht 23, 31 und 96 heißen, sondern 0x23, 0x31 und 
0x96. Aber das könnte man erst wissen, wenn man weiß, was denn 
Geheimnisvolles mit dieser aufwendig ermittelten Zahl passieren soll...

von H.Joachim S. (crazyhorse)


Lesenswert?

Warten wir ab, es wird sich aufklären :-)
Aber ich denke, ich liege richtig.

von Unwissender (Gast)


Lesenswert?

See also

STR , HEXVAL , HEX , BIN , BINVAL , STR2DIGITS

http://avrhelp.mcselec.com/index.html

von Michael H. (michael_h45)


Lesenswert?

Beitrag "Warum verhält sich Bascom so komisch??"
hier gehts - genauso konfus - weiter...

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.