Speichern von negativen Short- und Bytewerten

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

skey-z

Betreff: Speichern von negativen Short- und Bytewerten

BeitragMi, Sep 07, 2005 20:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hatte mir überlegt, wie ich für kleine, negative Zahlen eine Speicherroutine schreiben kann, ohne dabei 4 Bytes für Integer Werte zu verbrauchen.

Dazu Benutze ich erst die Suchfunktion, fand im Codearchiv aber nichts, aber vlt habe ich ja auch nihct Gründlich gesucht, aber die Volltextsuche zeigt mir 66 Seiten an und über die Titelsuche bin ich nicht fündig geworden.

Hier ist nun meine Lösung:

BlitzBasic: [AUSKLAPPEN]

;=======================================================;
;Neagtive Byte/Short Werte speichern und wieder auslesen;
;=======================================================;

;Autor: skey-z
;Date: 07.09.2005
;
;Zur freien Nutzung Verfügbar

;===============================================================
;Um \"kleine\" Byte-Werte zu speichern, muss in den Funktionen nur

;WriteShort => WriteByte
;ReadShort => ReadByte

;ersetzt werden
;===============================================================

SetBuffer BackBuffer()


SeedRnd MilliSecs()
wert%=0
file$=\"save.dat\"


Repeat

Flip
Cls

Text 20, 20, wert%


If KeyHit(59) Then
SaveValue(wert%, file$) ;F1 speichert den Wert

ElseIf KeyHit(60) Then
wert%=LoadValue(file$) ;F2 lädt den Wert

ElseIf KeyHit(57)
wert%=Rnd(-65535,65535) ;Neue Zufallszahl mit Leertaste

EndIf

Until KeyHit(1)

End


;Wert speichern
;=============================

Function SaveValue(value%, savepath$)

stream=WriteFile(savepath$)

;2. Wert für Prüfung erstellen
value2%=value%

;positiven wert speichern
WriteShort stream, Abs(value%)

;Prüfung auf negativen wert
If Sgn(value2%)=-1 Then
WriteByte stream, Asc(\"-\")
EndIf

CloseFile stream

End Function


;Wert Laden
;=============================

Function LoadValue(loadpath$)

stream=ReadFile(loadpath$)

If stream<>0 Then

;liest den positiven Wert ein
value%=ReadShort(stream)

;Prüfung auf negativen Wert
If (FilePos(stream) < FileSize(loadpath$)) Then

sign$=Chr$(ReadByte(stream))

;Vorzeichen setzen
value%=Int(sign$+value%)

EndIf

CloseFile stream

EndIf

Return value%

End Function


Falls Fragen, Anregungen oder Kritik aufkommen sollten habe ich ein offenes Ohr.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

Vertex

BeitragMi, Sep 07, 2005 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum das ganze nicht wie bei den Integerzahlen handeln?

Bei signed Byte:
%10000000 = -128
%11111111 = 0
%01111111 = +127

Bei signed Short:
%1000000000000000 = -32768
%1111111111111111 = 0
%0111111111111111 = +32767

Geht ganz easy mit den Bitoperatoren zu lösen.

mfg olli
vertex.dreamfall.at | GitHub

skey-z

BeitragDo, Sep 08, 2005 7:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Tja, das ist ja das problem, ich weiß zwar was bits und byts sind und dass man mit ihnen rechnen kann, aber so genau habe ich mich mit der materie nicht beschäftigt, und für diejenigen, die sowas auch nicht können, ist es wohl einfacher, eine "normale" Lösung zu verstehen.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

D2006

Administrator

BeitragDo, Sep 08, 2005 12:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

sorry, aber das ist ja echt ne schwachsinnige Lösung. Du hast den Wertebereich eines doppelten Short -65536 + 65536, aber verbrauchst 3 Bytes, was ungefähr -8388608 + 8388607 ensprechen würde.

Außerdem verstehe ich den Sinn nicht. Short kann doch von -32768 bis 32767 speichern. Klein und negativ, wie du es haben möchtest.

MfG
D2006
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2
 

lettorTrepuS

BeitragDo, Sep 08, 2005 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

skey-z

BeitragDo, Sep 08, 2005 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
@D2006
ich verwende nur 3bytes, wenn es negativ ist, bei positiven werten, sind es auch "nur" 2.

@ST

Sorry, bin von der arbeit etwas matsche im kopf und verstehe die Aussage in deinem post nicht, meinst du auch, dass meine Idee Schwachsinnig ist?


Werde mich dann wohl mal mit dem Thema bits näher beschäftigen, um eine Verbesserte Lösung zu konstuieren, aber für Anfänger, die wenig von der Materie versstehen, ist es wohl eine akzeptable Lösung.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
 

lettorTrepuS

BeitragFr, Sep 09, 2005 2:30
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group