3 byte >> long BASCOM-ban

hwsw famulus hwsw at famulus.hu
Wed Apr 27 01:12:13 CEST 2005


Kellene 3 byte-ban rendelkezesre allo long ertekekbol valodi longot 
gyartanom.
Megpedig igen keves orajel igennyel......
A szam tartomany tehat: -8388607 es 8388607 kozotti

A pozitiv szamok a rendes 3 byte-bol allnak
a negativ szamok szinten, csak a 3. byte-ban
a legfelso bit 1-be van maszkolva.

Azaz
 8008000 >> 64 49 122
-8008000 >> 64 49 250

Amit eddig kiagyaltam az (lasd a vegen) most a
fuggvenyhivassal egyutt 428 orajel.

Jo lenne 200 ala szoritani valahogy.....
De kezdek kifogyni az otletekbol.

Az igazi az lenne, ha valahogy bemasolhatnam a 3 byte-ot
a helyere, de ez az abrazolas okan igy nem jarhato ut.

Ha, talalnek!!! modot a sima bemasolasra, akkor
megoldhato lenne talan az is, hogy
a rendes elojeles long 4 byte-jat kapjam meg.

De, nem latok ra modot a BASCOM-ban assembler betet nelkul, hogy
a RAM egy cimere beirjak egy byte-t sajat kezuleg.

Bar akar egy ilyen assembler betetet is szivesen vennek
ami az adott nevu valtozoba bemasolja azt a negy byte-t

KJ

'-----------------------------------------------------------------
 Function B3l(b1 As Byte , B2 As Byte , B3 As Byte) As Long
'-----------------------------------------------------------------

Local Be As Byte
Local Bw As Word
Local Bl As Long

Be = B3 And 128   'elojel
B3 = B3 And 127  'normalizalas

'masodik bytebol word a helyierteke szerint
Bw = B2
Shift Bw , Left , 8

'harmadik byte-bol elcsuszatatva!! integer
'a negyedi byte ugyse jatszik es kevesebb igy a shift
Bl = Makeint(0 , B3)
Shift Bl , Left , 8

'osszerakas long szamma
B3l = B1 + Bw
B3l = B3l + Bl

'ha negativ akkor kivonas nullabol, mert
'sokal gyorsabb igy mint a B3l= -B3l !!!
If Be <> 0 Then
   B3l = 0 - B3l
End If


End Function






More information about the Elektro mailing list