|
| unsigned byte Fra : Morten Krogh Anderse~ |
Dato : 24-03-03 10:56 |
|
Findes der en (godt skjult) datatype, alá ovenstående?
Jeg har brug for en datatype lignende en unsigned byte, dvs. jeg har
brug for at opbevare 8 bits, med værdi fra 0 til 255.
Jeg ved godt at jeg kan lave en klasse til formålet, men da det er til
en lille controller med en java fortolker, har jeg ikke oceaner af
memory og hastighed at gøre godt med.
Desuden er der en del skrivning til, og læsning fra en byte baseret
kommunikation, så det skulle gerne være kompatibel hermed.
Mvh. Morten
| |
Rune Simonsen (26-03-2003)
| Kommentar Fra : Rune Simonsen |
Dato : 26-03-03 20:17 |
|
On Mon, 24 Mar 2003 10:56:29 +0100, Morten Krogh Andersen
<spam1@krogh.net> wrote:
> Findes der en (godt skjult) datatype, alá ovenstående?
Array of boolean? (Uden at jeg aner noget som helst om hvor effektivt
booleans er implementeret i java). Eller er det for bit-agtigt?
--
Rune Simonsen
| |
Michael Banzon (27-03-2003)
| Kommentar Fra : Michael Banzon |
Dato : 27-03-03 10:42 |
|
> Array of boolean? (Uden at jeg aner noget som helst om hvor effektivt
> booleans er implementeret i java). Eller er det for bit-agtigt?
Booleans er implementeret som integers, dvs. de fylder 4 byte i
memmory... det ville nok være |---------------------| <- så
ineffektivt at bruge den metode... Hvad skulle det bruges til,
kan umiddelbart ikke komme på noget der "kræver" unsigned..
det er jo det samme... og hvis du skal regne med tallene, kan
det vel løses med "lidt" matematik...
/ Michael
| |
Michael Banzon (27-03-2003)
| Kommentar Fra : Michael Banzon |
Dato : 27-03-03 10:55 |
|
> Booleans er implementeret som integers
Eller er det som bytes... hmmm... kan ikke huske det,
men, anyways, det er i hvert fald ikke den mest optimale
løsning...
/ Michael
| |
Soren Davidsen (27-03-2003)
| Kommentar Fra : Soren Davidsen |
Dato : 27-03-03 11:03 |
|
"Michael Banzon" <anyone@anywhere.anyhow> writes:
> > Booleans er implementeret som integers
>
> Eller er det som bytes... hmmm... kan ikke huske det,
> men, anyways, det er i hvert fald ikke den mest optimale
> løsning...
Der staar ikke noget i java-spec'en om at boolean skal implementeres
som byte eller lign. kun at den kun kan indeholde vaerdierne true
eller false.. Godt design > Optimeret kode.
Mvh,
--
___
Soren Davidsen / o\
Math student, ICSMA (_____)
__ http://www.tanesha.net/ _________________________________(___)_______
| |
Michael Banzon (27-03-2003)
| Kommentar Fra : Michael Banzon |
Dato : 27-03-03 12:55 |
|
> Der staar ikke noget i java-spec'en om at boolean skal implementeres
> som byte eller lign. kun at den kun kan indeholde vaerdierne true
> eller false.. Godt design > Optimeret kode.
Jamen... ... ... ok... men, jeg kunne forestille mig at det var meget
ineffektivt at allokere 8 gange så meget RAM som man har brug for...
/ Michael
| |
Rune Simonsen (27-03-2003)
| Kommentar Fra : Rune Simonsen |
Dato : 27-03-03 18:19 |
|
On Thu, 27 Mar 2003 10:41:51 +0100, "Michael Banzon"
<anyone@anywhere.anyhow> wrote:
> > Array of boolean? (Uden at jeg aner noget som helst om hvor effektivt
> > booleans er implementeret i java). Eller er det for bit-agtigt?
>
> Booleans er implementeret som integers[..]
Ja, så er min idé jo lidt klam :)
--
Rune Simonsen
| |
Morten Højer (31-03-2003)
| Kommentar Fra : Morten Højer |
Dato : 31-03-03 23:27 |
|
Morten Krogh Andersen wrote:
> Findes der en (godt skjult) datatype, alá ovenstående?
>
> Jeg har brug for en datatype lignende en unsigned byte, dvs. jeg har
> brug for at opbevare 8 bits, med værdi fra 0 til 255.
>
> Jeg ved godt at jeg kan lave en klasse til formålet, men da det er til
> en lille controller med en java fortolker, har jeg ikke oceaner af
> memory og hastighed at gøre godt med.
> Desuden er der en del skrivning til, og læsning fra en byte baseret
> kommunikation, så det skulle gerne være kompatibel hermed.
>
> Mvh. Morten
>
Jeg er sikker på, at java ikke har en unsigned-byte-type,
men da jeg selv har haft problemet mange gange, fandt jeg ud
af hvordan man lever med det:
Der er ikke noget problem med java's signed-byte-type som sådan.
Den indeholder nøjagtig de samme bitmønstre som en tilsvarende
unsigned-byte ville gøre. Forskellen ligger udelukkende i
fortolkningen af disse bitmønstre.
Hvis du f.eks. har et tal mellem 0 og 255 liggende i en int, kan
du bare typecaste den til byte:
int a = 155;
byte b = (byte)a;
nu ligger bitmønstret for 155 i b, selvom java opfatter det som
-101 (-101 i tokomplementsystemet har samme bitmønster som 155).
Når du så skal læse værdien fra b igen, skal du bare gøre sådan her:
int c = b & 0xFF;
Så har du, uden nogen overhead eller resourcespild, din oprindelige
værdi 155 tilbage.
Dette er, så vidt jeg ved, den eneste måde at gemme unsigned bytes på
i java, og det er også den måde Sun selv har brugt i deres egne
APIer.
Håber dette hjalp.
Venlig hilsen
Morten Højer
| |
|
|