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