Variablen definition ab 0 möglich?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
blbltheworm
Beiträge: 217
Registriert: 22.09.2004 19:36
Wohnort: Auf der schönen Schwäbischen Alb

Variablen definition ab 0 möglich?

Beitrag von blbltheworm »

Hallo zusammen,
ich hab folgende kleine Frage:
es ist ja so, dass alle PB-Variablen im negativen Bereich beginnen und dann ins positive gehen.
Geht es auch, dass ein Byte z.B. von 0 - 255 statt von -127 - 127 geht??
Oder kann das PB momantan noch nicht??
Oder soll es das auch nich können??
Ich fände es z.B. für RGB-Farbwerte sehr sinnvoll, wenn ich nicht jedes mal einen Word mit seinen 2Bytes verwenden müsste und ein Byte bereits reichen würde.
Kann mir da wer weiterhelfen??
Benutzeravatar
Lars
Beiträge: 347
Registriert: 31.08.2004 23:53
Wohnort: Shanghai
Kontaktdaten:

Beitrag von Lars »

Du musst einfach den Bytewert immer & $FF nehmen, das macht die
Variable unsigned.
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Derzeit geht es noch nicht. Es ist aber angedacht, soweit ich weiß, auch unsigned Variablen einzuführen sodass auch von 0 - 255 drinne ist. Aber ob das nur ein Gerücht war das ich irgendwo aufgeschnappt habe oder ob das kommen wird, weiß ich nicht sicher. Jedenfalls geht es derzeit noch nicht.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Variablen definition ab 0 möglich?

Beitrag von Danilo »

blbltheworm hat geschrieben: es ist ja so, dass alle PB-Variablen im negativen Bereich beginnen und dann ins positive gehen.
Geht es auch, dass ein Byte z.B. von 0 - 255 statt von -127 - 127 geht??
Oder kann das PB momantan noch nicht??
Schonmal ausprobiert?

Code: Alles auswählen

byte.b = $FF
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Re: Variablen definition ab 0 möglich?

Beitrag von freedimension »

blbltheworm hat geschrieben:Ich fände es z.B. für RGB-Farbwerte sehr sinnvoll, wenn ich nicht jedes mal einen Word mit seinen 2Bytes verwenden müsste und ein Byte bereits reichen würde.
Was genau möchtest du machen? Wenn du die Werte, z.B. für ein Bild speichern möchtest wäre es natürlich Speicherverschwendung hier ein Word oder gar ein Long zu verwenden. Anders sieht es aus wenn du rechnen willst, hier zahlt es sich aus, mit Longs zu arbeiten da diese schneller vom Prozessor verarbeitet werden (ist sozusagen sein Spezialgebiet).
Bei der Speicherung eines Bildes würde ich persönlich mit Pointern und den bitweisen Operatoren arbeiten da diese, vernünftig programmiert, schneller sind als jedes Array.

Siehe auch: http://www.robsite.de/php/pureboard-arc ... ian+filter
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
Sylvia
verheiratet<br>1. PureGolf-Gewinner
Beiträge: 487
Registriert: 29.08.2004 09:42
Wohnort: Old Europe

Beitrag von Sylvia »

blbltheworm hat geschrieben:Ich fände es z.B. für RGB-Farbwerte sehr sinnvoll, wenn ich nicht jedes mal einen Word mit seinen 2Bytes verwenden müsste und ein Byte bereits reichen würde.
Scheiss drauf
Danilo hat geschrieben:Schonmal ausprobiert?
byte.b = $FF
Ausser der Zuweisung bringt das auch nichts. Bleibt immer noch signed...!
PB kann's halt nicht.
Basic Pur = PureBasic
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Sylvia hat geschrieben:
Danilo hat geschrieben:Schonmal ausprobiert?
byte.b = $FF
Ausser der Zuweisung bringt das auch nichts. Bleibt immer noch signed...!
PB kann's halt nicht.
Darüber brauchen wir nicht zu reden, steht ja sogar in der Referenz
das PB nur vorzeichenbehaftete Datentypen kennt.

Ich fand die Zuweisung aber dringend erforderlich und
konnte das damals durchsetzen - und habe das schon
öfters brauchen können.

Wenn ich schreibe 'byte.b = 255' dann kommt es darauf
an was ich damit machen möchte. Ich kann dieses Byte in
eine Datei schreiben, ich kann den Wert ausgeben:

Code: Alles auswählen

byte.b = 255
Debug StrU(byte,#BYTE)
und noch einiges mehr. Teilweise kann man es normal
wie unsigned verwenden:

Code: Alles auswählen

byte.b = 200
byte + 23
Debug StrU(byte,#BYTE)
Damit hat man wenigstens ein paar mehr Möglichkeiten, als
wenn diese Zuweisung und StrU() nicht möglich wäre.
Zusammen mit der Umwandlung in einen größeren Datentyp
und dem bitweisen UND ist somit für Byte und Word schon
ganz gut was möglich.

Das ändert natürlich nichts daran das PB keine unsigned
Datentypen unterstützt. Man sollte diese Möglichkeiten aber
kennen, da es manchmal recht hilfreich sein kann - mehr
wollte ich damit nicht sagen.

Oftmals ist es einfach eine Sache der Interpretation des
Programmierers ob er den Inhalt der Variable als signed
oder unsigned ansieht.
Der entscheidende Punkt ist dann die Ausgabe, z.B. mit Str() oder StrU().

Auch das ausmaskieren mit dem bitweisen UND sollte ein
PureBasic-Programmierer kennen. Kann vielleicht mal helfen.
Ein kleines Beispiel welches den großen Unterschied zeigt:

Code: Alles auswählen

byte.b = 1
While byte & $FF > 0
  Debug StrU(byte.#BYTE)
  byte + 1
Wend
Diese Schleife gibt das byte.b aus...von 1 bis 255. Entfernt man
nun das "& $FF" gibt es nur Zahlen bis 127 aus.

Für Dich, Sylvia, ist das natürlich alles normal. Neueinsteiger
bei PB kommen aber meist nicht auf sowas und sollten deshalb
darauf aufmerksam gemacht werden, so daß sie dann wenigstens
ein kleines bißchen besser arbeiten können.

Mir war der Wertebereich damals sehr wichtig für DataSections
in denen ich Bytes habe.

Code: Alles auswählen

Data.b $FF, $80, $CA, $FA
Ohne die Erweiterung der Zuweisungen war das damals nicht
möglich, und das hat mich schon sehr gestört - weshalb es
geändert wurde und uns somit ein paar mehr Möglichkeiten
und Freiheiten gibt.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
blbltheworm
Beiträge: 217
Registriert: 22.09.2004 19:36
Wohnort: Auf der schönen Schwäbischen Alb

Beitrag von blbltheworm »

Hey, danke Danli.
Auf die Idee bin ich noch gar nicht gekommen :).
Und wenn ich einen unsignet Word will muss ich einfach & $FFFF machen, da es zwei Byte sind??
Also danke für eure Hilfe.
Benutzeravatar
Lars
Beiträge: 347
Registriert: 31.08.2004 23:53
Wohnort: Shanghai
Kontaktdaten:

Beitrag von Lars »

blbltheworm hat geschrieben:Und wenn ich einen unsignet Word will muss ich einfach & $FFFF machen
Probiers halt aus :wink:
Stimmt aber so.
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
Antworten