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?
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 :(
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
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.
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 :(
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.
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.
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 ?
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.
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...