Sind die Rechenoperationen für Größen über 2 byte vorgesehen?
18 geht ja als Ergebnis von (332400 mod 2^16) / 216
Manfred
Hallo leute,
kann mir einer erklären, warum folgende Rechnung als Ergebniss 18 liefert?
Es hat was damit zu tun, dass A eine eine Variable ist, setze ich direkt 261 ein, klappt es.$baud = 19200
Const Konstante = 332400
Dim A As Word
Dim B As Word
A = 261
B = Konstante / A
Print B
End
Wie kriege ich das Problem gelöst?
Danke schonmal für alle Mühen im Voraus.
MFG Moritz
Sind die Rechenoperationen für Größen über 2 byte vorgesehen?
18 geht ja als Ergebnis von (332400 mod 2^16) / 216
Manfred
Erwischt... Keine Ahnung...
Aber wenn ich einfach:
B = 332400/261 rechne, klappt es!
Oder was meisntest du?
MFG Moritz
Könnte es sein, dass Du mit Deinem Datentyp 'word' einen cast vornimmst, das heißt die Rechenoperation nur im 2 Byte-Bereich abläuft? Versuchs mal mit'nem 'long int' falls es so was in Basic gibt. Kenn mich nur mit C aus.
@ Manf:
Was genau meint mod?
@lorcan:
Ich glaube Basic (Bascom) verfügt nur über:
Bit
Byte
Word
Integer
Single
Und jetzt kommts, wenn ich B als Single declariere, dann klappts!
Das versteh mal einer:
Dim B as Word
B = 332400 / 261
klappt!
Dim B as Word
B = 332400 / A 'A = 261 (Word)
klappt nicht!
Dim B as Single
B = 332400 / A 'A = 261 (Word)
klappt!
Das verstehe ich echt nicht, wenn ich direkt Zahlen einsetzte ist es egal, wie groß die sind. Wenn A ein Word es klappt es dann nicht, außer wenn B ein Single ist.
Jetzt hab ich nen super Ergebniss:
1273.562110341
So genau wollte ich es nicht wissen, klaut mir auch eigenlich zuviel Speicher, dieses Single!
MFG Moritz
hi,
Bascom kennt auch die long-typen (4byte), damit sollte es gehen und knabbert nicht so mörderisch am speicher ab.
grüssens, harry
der kopf ist rund damit das denken seine richtung ändern kann...
Wunderbar! Damit klappts auch.
Also ich hatte schon öfter probleme mit den Variablengrößen:
Bit = Klar
nibble gibts nicht, oder?
byte = 8 Bit > 0 - 255
Word = 16 Bit > 0 -65535
Integer = 16 Bit > -32767 - 32767
longinteger gibts nicht, oder?
long = 32 Bit > 0 - 4.294.967.296 (auch bekannt als double word, oder?)
single = ? > ?
Danke nochmal! Aber verstehen tue ich es immer noch nicht.
MFG Moritz
Die Schreibweise ist vielleicht auch schon ein Opfer der Rechtschreibreform.@ Manf: Was genau meint mod?
Die mathematische, nicht programmtechnische Schreibweise von Modulo.
http://de.wikipedia.org/wiki/Kongruenz_(Zahlentheorie)
Manfred
Was soll das nun wieder heißen?Die Schreibweise ist vielleicht auch schon ein Opfer der Rechtschreibreform.
Mod war mir aus Delphi bekannt, na eher wieder unbekannt. Aber warum sollte Bascom so einen Aufwand machen? ODer willst du damit sagen, dass damit nur die oberen Bits über 2^16 wegfallen und der Rest durch 216 geteilt wird?
Ja das wolltest du sagen, hab grade mal nachgerechnet.
Gibt dann in soweit auch Sinn!
Ich verstehe nur nicht, warum dann
B[Word] = 332400/261
funktioniert.
hi,
bin ich auch schon öfters drübergestolpert und komm zu dem schluss, dass bei jeder rechenoperation mit variablen der zieltyp so gross sein muss, dass er jeden operanten aufnehmen könnte.
vielleicht machts Bascom ja so:
kopiere KONSTANTE in VARIABLE_B und teile dann B durch A, dann wäre zumindest nachvollziehbar warum dem so ist.
grüssens, harry
der kopf ist rund damit das denken seine richtung ändern kann...
Lesezeichen