Seite 1 von 1

For ... Next kann nicht mit Byte umgehen? (gelöst.. naja ;))

Verfasst: 29.05.2006 14:56
von Kurzer
Hallo zusammen,

folgendes ist mir gerade bei meinem ersten PB Projekt aufgefallen:

Ich nutze eine Byte Variable für eine For Next Schleife, aber die Schleife
wird nicht ausgeführt. Stattdessen springt er (Debugmodus, Steppen) direkt
zum Next und setzt die Zählervariable auf -112.

Benutze ich ein Word als Zählervariable, dann klappt alles wunderbar.

Liegt's an mir oder an PB?

Code: Alles auswählen

Procedure InitCards()
  Protected Count.b, Card.b = 1

  For Count = 0 To 143 Step 1
    Debug Count ; Hier kommt er nie hin, wenn Count eine Bytevariable ist!
  Next Count

  ; ... Rest entfernt...

EndProcedure
Gruß Markus (leicht verwirrt)

Verfasst: 29.05.2006 15:02
von Kurzer
Ich sehe gerade in der PB HIlfe folgendes:

Byte .b 1 Byte -128 bis +127

Wie krank ist das denn?

Den Wertebereich eines Bytes zu verändern? Etwas, was so feststeht wie die Naturgesetze... ? Wer hat sich denn das ausgedacht?

Ein Byte war in meinem bisherigen Leben noch nie Vorzeichenbehaftet.
Sicherlich wird einem JEDER, der auch nur ein bißchen programmiert sagen, daß ein Byte von 0-255 reicht.

Man man... da muß einer aber echt breit gewesen sein, als er sich das ausgeheckt hat. :freak:
(also ist jetzt alles nicht wirklich bös gemeint, aber ist schon ein echter Kulturschock für mich)

Gruß Markus

Verfasst: 29.05.2006 15:05
von Kaeru Gaman
zu irgendwelchen problemen mit byte hatten wir schon öfter was.

da du step absolut angibst, wird es wohl als long (bzw. quad in 4.0) angesehen.
sollte zwar eigentlich nicht so komische ergebnisse bringen, aber könnte daran hängen.

wieauchimmer: da du bestimmt kein Händie programmierst, solltest du nicht so geizen mit deinem speicher. ob du nun Longs/Quads für deine zähler benutzt, oder in china platzt'n sack reis is nu echt banane...

[edit]
zu deinem zweiten post: in PB sind alle Variablen nun mal vorzeichenbehaftet, das sind sie auch in anderen programmiersprachen, deshalb gibt es z.b. in C den typ char = unsigned byte.

also, das ist sehr oft so, dass ein byte ein vorzeichen hat, das ist kein grund, hier glei so rumzugreine...

Verfasst: 29.05.2006 15:16
von Kurzer
Kaeru Gaman hat geschrieben:...da du step absolut angibst, wird es wohl als long (bzw. quad in 4.0) angesehen.
sollte zwar eigentlich nicht so komische ergebnisse bringen, aber könnte daran hängen.
Ohne Step verhält es sich genauso.
Kaeru Gaman hat geschrieben:wieauchimmer: da du bestimmt kein Händie programmierst, solltest du nicht so geizen mit deinem speicher. ob du nun Longs/Quads für deine zähler benutzt, oder in china platzt'n sack reis is nu echt banane...
Eben, ich nehm ja jetzt auch nen Word, damit gehts.
Es ist aber dennoch ungewöhnlich, finde ich.
Kaeru Gaman hat geschrieben:[edit]
zu deinem zweiten post: in PB sind alle Variablen nun mal vorzeichenbehaftet, das sind sie auch in anderen programmiersprachen, deshalb gibt es z.b. in C den typ char = unsigned byte.

also, das ist sehr oft so, dass ein byte ein vorzeichen hat, das ist kein grund, hier glei so rumzugreine...
Vermutlich liegts einfach daran, daß ich früher viel in Assembler gemacht habe und z.B. C niemals programmier habe. :)

Und rumgreine... tue ich nicht. Sorry, wenn das für Dich so klang.
Ich schrieb ja, daß es nicht wirklich bös gemeint war. Stell Dir halt vor, Du kaufst Dir ein Auto und wenn Du damit nach links lenkst dann fährt es nach rechts usw... Da kriegst Du bestimmt auch erstmal dicke Augen, weil alle anderen Autos, die Du vorher hattest das genau anders gemacht haben. ;)

Gruß Markus

Verfasst: 29.05.2006 15:33
von Rings
Kurzer hat geschrieben:Ich sehe gerade in der PB HIlfe folgendes:

Byte .b 1 Byte -128 bis +127

Wie krank ist das denn?

Den Wertebereich eines Bytes zu verändern? Etwas, was so feststeht wie die Naturgesetze... ? Wer hat sich denn das ausgedacht?

Ein Byte war in meinem bisherigen Leben noch nie Vorzeichenbehaftet.
Sicherlich wird einem JEDER, der auch nur ein bißchen programmiert sagen, daß ein Byte von 0-255 reicht.

Man man... da muß einer aber echt breit gewesen sein, als er sich das ausgeheckt hat. :freak:
(also ist jetzt alles nicht wirklich bös gemeint, aber ist schon ein echter Kulturschock für mich)

Gruß Markus
full acknowlegde .
Seit nunmehr 4 Jahren wo ich das PB kenne hat es nix mit
Standards am Hut.

Sowas gibts nur hier , ein sByte :)

Verfasst: 30.05.2006 00:04
von ullmann
Sicher gab es Gründe, dass Fred in PureBasic (seiner Programmiersprache wohlgemerkt) den Typ Byte vorzeichenbehaftet (signed) implementiert hat.

In der Hilfe steht es ja eindeutig drin Bytebereich: -128 bis +127

Was passiert in deiner For-Next-Schleife?

Der Endwert 143 passt nicht in den signedByte-Werte-Bereich. Er wird unsigned eingetragen (%1000111) und dann signed gelesen (=-113). Und deshalb wird die Schleife nicht durchlaufen.

Code: Alles auswählen

count1.c=%1000111
count2.b=%1000111
Debug Count1
Debug Count2
Rainer

Verfasst: 30.05.2006 01:11
von Froggerprogger
Bzgl. Standards:

In Java: byte von -128 bis 127
In C: char von -128 bis 127 (dort gibt es aber alternativ auch unsigned char)
...

Verfasst: 30.05.2006 08:46
von Rings
Froggerprogger hat geschrieben:Bzgl. Standards:

In Java: byte von -128 bis 127
In C: char von -128 bis 127 (dort gibt es aber alternativ auch unsigned char)
...
wir reden aber hier von BASIC
und da iss der standard meines wissens nach (und ich
programmiere seit 1987) das ein byte immer von 0-255 geht.
oder wie in asm von 0 bis $FF .
im übrigen ist ein Char etwas anderes wie ein byte(per definition) .
und vielleicht ist mein wissen auch fehl am platze und ich bin
schon zu verseucht von anderen 'INDUSTRIE tauglichen Sprachen'.

Verfasst: 30.05.2006 08:54
von rolaf
Rings hat geschrieben:wir reden aber hier von BASIC
und da iss der standard meines wissens nach (und ich
programmiere seit 1987) das ein byte immer von 0-255 geht.
Obs Standard ist weis ich nicht, ich kann aber ebenfalls bestätigen, das ich in allen Basic's (und das sind einige) die ich bisher in den Fingern hatte (außer eben PB) tatsächlich das Byte immer von 0-255 geht. Ungewöhnlich ist es daher schon, aber wenn man es weis kann man ja damit umgehen, wenn auch manchmal umständlicher.

Verfasst: 30.05.2006 11:26
von Froggerprogger
Von anderen BASICs weiss ich das nicht mehr so genau.
Aber soo schlimm ist es ja auch nicht, wenn man weiss, ob signed oder unsigend verwendet wird.

@DieDieDasNochNichtKannten
Und wenn man z.B. Bytes mit Bytes verrechnet führt dank Zweierkomplement beides sowieso zum selben Ergebnis. Liest man also aus einer Datei Bytes aus und verrechnet die miteinander über +-*/ ist es egal, ob man dies signed oder unsigned tut, oder wie sie beim Schreiben gemeint waren, man schreibt in jedem Fall dieselben Bits zurück.
Auch bei z.B. Robotersteuerungen. Falls in der Anleitung steht, man sende die 215, dann weist man einfach die 215 einem Byte zu und schickt die los, auch wenn die intern eine negative Zahl ist - sie hat dieselben Bits gesetzt.