Negativ Ausgabe ACTION!


Negativ Ausgabe ACTION!

von Cash » Mi 7. Jan 2015, 20:15
Hi,
ich möchte eine kleine Function schreiben die der SGN Funktion in Basic entsprechen soll.

Mein code bisher:

Code: Alles auswählen
Byte Func Signum(int x)
Int SGN
If x>0 then SGN=1
Elseif
x=0 then
SGN=0
Elseif x<0 then
SGN=-1
Fi
Return(SGN)

Proc Main()
INT Y, Zahl
Y=-2
Zahl=Signum(Y)
Position(5,5)
PrintIE(Zahl)
Return



Das Ergebnis bei 0 oder >0 ist ok, aber bei <0 sollte eigentlich eine -1 als Ergebnis kommen stattdessen bekomme ich eine 255?!
Kann mir bitte jemand erklären was ich falsch gemacht habe bzw. wie ich es machen sollte?

Re: Negativ Ausgabe ACTION!

von Sven » Mi 7. Jan 2015, 20:50
Ohne Ahnung von Action zu haben mal ein Schuss ins Blaue:

Int x interpretiere ich als Integer und würde annehmen das x einen Wert (8Bit) annehmen kann - 0 bis 255 (unsigned).

Für eine Darstellung von negativen Zahlen brauchst du wohl eine signed-Variable die bei 8bit den Bereich von -127 bis 128 annehmen kann.

Mal schauen ob es jetzt für mich peinlich wird :P

Re: Negativ Ausgabe ACTION!

von mp-one » Mi 7. Jan 2015, 22:21
Hi Cash,

mach mal aus der BYTE FUNC SIGNUM eine INT FUNC SIGNUM. INT ist ein 16-Bit-Typ, der Werte von -32768 bis 32767 aufnehmen kann, BYTE dagegen ein 8-Bit-Typ, der Werte von 0...255 speichern kann. Wenn Du nun ein INT als BYTE zurückgibst, "säbelst" Du den Wert in der Mitte durch mit dem beschriebenen Effekt. CARD ist ebenfalls ein 2-Byte-Typ, speichert aber nur Werte von 0..65535.

Gruß

Re: Negativ Ausgabe ACTION!

von Sven » Mi 7. Jan 2015, 22:42
Nah dran... ;)

Re: Negativ Ausgabe ACTION!

von Cash » Mi 7. Jan 2015, 23:09
Danke jetzt geht's. Das mit Integer wusste ich auch, hatte auch alle Bytes in INT's umgeschrieben nur das vor der Funktion übersehen. :oops:

Re: Negativ Ausgabe ACTION!

von FlorianD » So 11. Jan 2015, 17:13
das müßte auch so gehen, kürzer und schneller
Code: Alles auswählen
INT FUNC sig(int x)
if x<0
return(-1)
 else
return(1)
fi