Avatar billede clone Nybegynder
21. marts 2001 - 14:59 Der er 10 kommentarer og
1 løsning

Fra signed til unsigned værdi, hvordan?

Jeg har en byte, som indeholder værdien 255! Men pga. Java\'s desværre meget strenge håndtering af integers som altid værende \"signed\", bliver værdien repræsenteret som -1.
Jeg er interesseret i at kopiere værdien 255 - altså bitsekvensen 11111111 (hex: 0xFF) - ind i en integer variabel. Desværre skal Java absolut tolke værdien som -1, hvilket betyder at min integer nu indeholder -1 og IKKE 255 (\"unsigned\"), som det var meningen! Hvad gør jeg???
(længe leve C/C++, hvor alt er så nemt!!!)
Avatar billede disky Nybegynder
21. marts 2001 - 15:17 #1
hvis du synes C/C++ er nemmest har du ikke set lyset endnu :-)

det kan du ikke en byte er også signed.

Hvor får du den byte fra ?

Hvorfor ikke bare bruge en int med det samme ?
Avatar billede clone Nybegynder
21. marts 2001 - 15:18 #2
Nu er man vel ingeniør, så jeg kunne da hurtigt regne følgende formel ud:

int i = ((b >> 4) & 0x0f) * 16 + (b & 0x0f);

men der må da vær en langt bedre og ikke mindst hurtigere metode, lige som i C hvor dette kan gøres med en simpel type cast...?
Avatar billede clone Nybegynder
21. marts 2001 - 15:22 #3
... i C havde jeg bare brugt en char (som er 8-bit) og lavet en type cast til en int.
Jeg tror diskussionen om hvad der er bedst (C/C++ eller Java) hører hjemme over en øl på den lokale bodega lørdag aften. Det kommer nok meget an på hvad man skal lave...
Avatar billede disky Nybegynder
21. marts 2001 - 15:24 #4
det med en øl kan vi sagtens finde ud af :-)

2 ting.

det nemmeste er nu :
  int z= (x&0xf0) + (x&0x0f);

når du bruger bitforskyd til at dividere med hvorfor så ikke til at gange med også ? :-))
Avatar billede disky Nybegynder
21. marts 2001 - 15:26 #5
lidt spøjst man skal gøre det på den måde.

Men normalt bruger man bare en short til små tal :-) er vist 16 bit.
Avatar billede stig3 Mester
21. marts 2001 - 15:27 #6
......... og hvad man startede med at programmere i.

Jeg er i gang med at går den anden vej fra java til C og jeg synes ikke overraskende det modsatte :-)

Alt det der med bit-representering og 2\'s kompliment er man jo fri for at tænke på i java, hvilket jeg personligt synes er lækkert.

Hvis det bare er et almindeligt cast kan du prøve:
(Integer)dinVar

Men du får nok ikke ov til det fra en simpel type som int.
Avatar billede disky Nybegynder
21. marts 2001 - 15:29 #7
det med hvad man plejer at programmere i passer nogenlunde.

Jeg er uddannet med C/C++ og udvikler i Java idag.
Jeg synes ikke at jeg er i tvivl om hvad er bedst.

Men ok, til hardware nære ting ville jeg nok også bruge C/C++
Avatar billede disky Nybegynder
21. marts 2001 - 15:51 #8
der er forresten en meget simpel forklaring på dit problem.

byte, short, int, long er ALLE signed.

Der findes kun en der er unsigned og det er char og den er 16 bit.
Avatar billede disky Nybegynder
21. marts 2001 - 15:52 #9
så du slipper ikke for lidt bit skubberi:

byte x=255;

int z= (x&0xf0) + (x&0x0f);

nu er z = 255;
Avatar billede clone Nybegynder
21. marts 2001 - 19:46 #10
Yes yes, jeg ved det. Nåh, men tak for diskussionen. Du fortjener de point for dit engagement.
Avatar billede disky Nybegynder
22. marts 2001 - 08:40 #11
mange tak.

så du får lige den korte deluxe udgave som bonus.

int z= x&0xff;

Hvor den virker er egentligt klart.

Når byten som er signed skal lave til en int sker følgende.

byte = 11111111
int til at starte med 00000000000000000000000000000000
så blive byt kopieret over i int
00000000000000000000000011111111
men for at bevare sign bliver bit 7 i byte expanderet hele vejen op i int\'en så int bliver til
11111111111111111111111111111111
men så kommer vi med en lille & og vupti
00000000000000000000000011111111
Og så passer værdien.

Og nu er det da ligeså nemt som at kaste :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester