/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Fra lon to int? typecasting??
Fra : Mads Kristiansen


Dato : 15-05-01 16:43

Kan man typecaste fra long til int?

-Jeg er desperat!

Hilsner fra Mads



 
 
Mikkel Bundgaard (15-05-2001)
Kommentar
Fra : Mikkel Bundgaard


Dato : 15-05-01 16:50

Mads Kristiansen <2546927m001@mail1.stofanet.dk> wrote in message
news:48cM6.123$Zv.31216@news101.telia.com...
> Kan man typecaste fra long til int?
>
> -Jeg er desperat!
>
> Hilsner fra Mads
>
Hej Mads

Det kan man godt, men det kan godt være, at
du mister noget information, da en long kan
indeholde større tal end int.

F.eks.

long tmp = 12;
int intTmp = ( int ) tmp;

--
Mvh.
Mikkel Bundgaard
RUC Datalogi



Mads Kristiansen (15-05-2001)
Kommentar
Fra : Mads Kristiansen


Dato : 15-05-01 16:58

Hej Mikkel!

Tak for hjælpen!

Jeg arbejder med så små tal at det ikke kommer til at betyde noget. Fedt at
få hurtigt hjælp!
Min fejl var at jeg havde skrevet:

long tmp = 12;
int intTmp = ( Ínteger ) tmp

Hilsner fra Mads


"Mikkel Bundgaard" <mikkelbu@teliamail.dk> wrote in message
news:9drjd4$qdq$1@sunsite.dk...
> Mads Kristiansen <2546927m001@mail1.stofanet.dk> wrote in message
> news:48cM6.123$Zv.31216@news101.telia.com...
> > Kan man typecaste fra long til int?
> >
> > -Jeg er desperat!
> >
> > Hilsner fra Mads
> >
> Hej Mads
>
> Det kan man godt, men det kan godt være, at
> du mister noget information, da en long kan
> indeholde større tal end int.
>
> F.eks.
>
> long tmp = 12;
> int intTmp = ( int ) tmp;
>
> --
> Mvh.
> Mikkel Bundgaard
> RUC Datalogi
>
>



Jonas Kongslund (15-05-2001)
Kommentar
Fra : Jonas Kongslund


Dato : 15-05-01 17:00

Mads Kristiansen wrote:
> Min fejl var at jeg havde skrevet:
>
> long tmp = 12;
> int intTmp = ( Ínteger ) tmp

-----------------^
Har du drukket?


Tag gerne et kig på http://www.usenet.dk/netikette/quote.html

--
Jonas Kongslund, http://kongslund.dk

Mads Kristiansen (15-05-2001)
Kommentar
Fra : Mads Kristiansen


Dato : 15-05-01 17:25

> -----------------^
> Har du drukket?
>
>
> Tag gerne et kig på http://www.usenet.dk/netikette/quote.html
>
> --
> Jonas Kongslund, http://kongslund.dk


--------------------------^

Jooo, jeg drikker også!



Jonas Kongslund (15-05-2001)
Kommentar
Fra : Jonas Kongslund


Dato : 15-05-01 16:57

Mads Kristiansen wrote:
> Kan man typecaste fra long til int?

Ja.

long foo = 2363463934;
int bar = (int) foo;

Du skal bare være opmærksom på at hvis det tal du prøver at repræsentere
i foo ikke kan repræsenteres som et 32 bit signed tal, dvs. hvis det
ikke ligger i intervallet fra -2^31 til (2^31)-1, så vil konverteringen
producere skrald.

--
Jonas Kongslund, http://kongslund.dk

Bertel Lund Hansen (15-05-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 15-05-01 18:50

Jonas Kongslund skrev:

>i foo ikke kan repræsenteres som et 32 bit signed tal, dvs. hvis det
>ikke ligger i intervallet fra -2^31 til (2^31)-1, så vil konverteringen
>producere skrald.

Skrald? Vil den ikke bare maske de øverste bits væk?

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Soren 'Disky' Reinke (15-05-2001)
Kommentar
Fra : Soren 'Disky' Reinke


Dato : 15-05-01 19:51


"Bertel Lund Hansen" <nospamto@lundhansen.dk> skrev i en meddelelse
news:71r2gtgqdi1uut9r6nbhupolhdclb1ssnr@sunsite.auc.dk...
> Jonas Kongslund skrev:
>
> >i foo ikke kan repræsenteres som et 32 bit signed tal, dvs. hvis det
> >ikke ligger i intervallet fra -2^31 til (2^31)-1, så vil konverteringen
> >producere skrald.
>
> Skrald? Vil den ikke bare maske de øverste bits væk?

Jep men så er det jo også 'skrald' da tallet intet har med det originale tal
at gøre

--
With many Thanks

Soren ' Disky ' Reinke ICQ #1413069 http://www.disky-design.dk/fishj
Remove IHSYD from email address when replying by email





Jonas Kongslund (15-05-2001)
Kommentar
Fra : Jonas Kongslund


Dato : 15-05-01 20:22

Bertel Lund Hansen wrote:
> Skrald? Vil den ikke bare maske de øverste bits væk?

Jeg er ikke klar over om specifikationen for JVM'en dikterer en sådan
opførelse, så derfor nævnte jeg det ikke i mit indlæg. I tilfælde af at
det er gældende, så kan man jo kalde det veldefineret skrald.

Det er alligevel de færreste algoritmer som kan drage fordel af at
skraldet er veldefineret, og såfremt man bevæger sig ind på dette
territorium så er man godt på vej til at bliver hacker.

--
Jonas Kongslund, http://kongslund.dk

Bertel Lund Hansen (15-05-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 15-05-01 20:54

Jonas Kongslund skrev:

>Jeg er ikke klar over om specifikationen for JVM'en dikterer en sådan
>opførelse, så derfor nævnte jeg det ikke i mit indlæg. I tilfælde af at
>det er gældende, så kan man jo kalde det veldefineret skrald.

Ganske rigtigt.

>Det er alligevel de færreste algoritmer som kan drage fordel af at
>skraldet er veldefineret

Det er jeg nu ikke enig i. Hvis jeg skulle have masket en
netadresse, kunne det da være at det lige passede med at en
typecast slagtede de bits jeg skulle af med.

>og såfremt man bevæger sig ind på dette
>territorium så er man godt på vej til at bliver hacker.

Hm - det er "hacker" i Unix-betydningen. Jeg bruger ordet om en
der bryder ind i et system. Hvis man vil være sikker på at blive
forstået, bruger man det slet ikke.

[Opslag i min Javabog ...]

Man *kan* stole på at der udføres en modulo-beregning med den nye
types maksimalværdi.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Jonas Kongslund (15-05-2001)
Kommentar
Fra : Jonas Kongslund


Dato : 15-05-01 22:55

Bertel Lund Hansen wrote:
> >Det er alligevel de færreste algoritmer som kan drage fordel af at
> >skraldet er veldefineret
>
> Det er jeg nu ikke enig i. Hvis jeg skulle have masket en
> netadresse, kunne det da være at det lige passede med at en
> typecast slagtede de bits jeg skulle af med.

Jeg skrev "færreste algoritmer" for selvfølgelig kan man finde
anvendelser.

> Hm - det er "hacker" i Unix-betydningen. Jeg bruger ordet om en
> der bryder ind i et system. Hvis man vil være sikker på at blive
> forstået, bruger man det slet ikke.

Visse budskaber kan ikke formidles med samme ånd, såfremt man udelader
at bruge ordet "hacker".

> [Opslag i min Javabog ...]
>
> Man *kan* stole på at der udføres en modulo-beregning med den nye
> types maksimalværdi.

Jeg tog mig samme og gik direkte til kilden (der ikke var JVM
specifikationen som tidligere skrevet, men derimod
sprogspecifikationen):

"A narrowing conversion of a signed integer to an integral type T simply
discards all but the n lowest order bits, where n is the number of bits
used to represent type T."

http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#25363

--
Jonas Kongslund, http://kongslund.dk

Bertel Lund Hansen (15-05-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 15-05-01 23:31

Jonas Kongslund skrev:

>"A narrowing conversion of a signed integer to an integral type T simply
>discards all but the n lowest order bits, where n is the number of bits
>used to represent type T."

Det er en anden måde at sige det samme på.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

James Olsen (16-05-2001)
Kommentar
Fra : James Olsen


Dato : 16-05-01 15:38


"Bertel Lund Hansen" <nospamto@lundhansen.dk> wrote in message
news:9m13gtcrilto2lqq5n1qodda71nf9f4vrk@sunsite.auc.dk...
> [Opslag i min Javabog ...]
>
> Man *kan* stole på at der udføres en modulo-beregning med den nye
> types maksimalværdi.

Hvis det der betyder det jeg tror så er det ikke sådan det foregår. Nu er
jeg dog lidt langsom idag men hvad menes der ? Kan jeg lige få den med et
regne eksempel ?

>
> --
> Bertel
> http://lundhansen.dk/bertel/ FIDUSO: http://fiduso.dk/



Bertel Lund Hansen (17-05-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 17-05-01 12:42

James Olsen skrev:

>> Man *kan* stole på at der udføres en modulo-beregning med den nye
>> types maksimalværdi.

>Hvis det der betyder det jeg tror så er det ikke sådan det foregår.

Det er ikke helt præcist alligevel, selv om det var det der stod i min bog.
Her er den præcise forklaring (ses bedst med fast skrifttype):

Binært:
long   0010 1011 0101 1110 1111 1000 1110 0101 0101 0100 1010 1010 1001 0101 1111 0110
int                   0101 0100 1010 1010 1001 0101 1111 0110
                   ^
Hexadecimalt:

long:   2B 5E F8 E5 54 AA 95 F6
int:       54 AA 95 F6

Decimalt:
long:   8'889'816'378'327'602'678
int       1'420'465'654

De andre numeriske typer opfører sig på lignende måde.

Man skal være forsigtig med om der dukker negative tal op.
Jeg bruger samme eksempel, men ændrer den markerede bit til 1:

Binært:
long   0010 1011 0101 1110 1111 1000 1110 0101 1101 0100 1010 1010 1001 0101 1111 0110
int                   1101 0100 1010 1010 1001 0101 1111 0110
                   ^
Hexadecimalt:

long:   2B 5E F8 E5 D4 AA 95 F6
int:       D4 AA 95 F6

Decimalt:
long:   8'889'816'380'475'086'326
int       -727'017'994

Det skyldes at den mestbetydende bit er fortegnsbit.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

James Olsen (17-05-2001)
Kommentar
Fra : James Olsen


Dato : 17-05-01 15:25


"Bertel Lund Hansen" <nospamto@lundhansen.dk> wrote in message
news:s4d7gtct9jplfj3698fj61ikne054617kr@sunsite.auc.dk...
> James Olsen skrev:
>
> >> Man *kan* stole på at der udføres en modulo-beregning med den nye
> >> types maksimalværdi.
>
> >Hvis det der betyder det jeg tror så er det ikke sådan det foregår.
>
> Det er ikke helt præcist alligevel, selv om det var det der stod i min
bog.
> Her er den præcise forklaring (ses bedst med fast skrifttype):
>
> Binært:
> long 0010 1011 0101 1110 1111 1000 1110 0101 0101 0100 1010 1010
1001 0101 1111 0110
> int 0101 0100 1010 1010 1001 0101 1111 0110
> ^
> Hexadecimalt:
>
> long: 2B 5E F8 E5 54 AA 95 F6
> int: 54 AA 95 F6
>
> Decimalt:
> long: 8'889'816'378'327'602'678
> int 1'420'465'654
>
> De andre numeriske typer opfører sig på lignende måde.
>
> Man skal være forsigtig med om der dukker negative tal op.
> Jeg bruger samme eksempel, men ændrer den markerede bit til 1:
>
> Binært:
> long 0010 1011 0101 1110 1111 1000 1110 0101 1101 0100 1010 1010
1001 0101 1111 0110
> int 1101 0100 1010 1010 1001 0101 1111 0110
> ^
> Hexadecimalt:
>
> long: 2B 5E F8 E5 D4 AA 95 F6
> int: D4 AA 95 F6
>
> Decimalt:
> long: 8'889'816'380'475'086'326
> int -727'017'994
>
> Det skyldes at den mestbetydende bit er fortegnsbit.
>

Tak, jeg skulle bare lige have verificeret at jeg ikke havde regnet galt
selv og at det ikke havde noget med modulus at gøre ;)


> --
> Bertel
> http://lundhansen.dk/bertel/ FIDUSO: http://fiduso.dk/



Bertel Lund Hansen (17-05-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 17-05-01 15:52

James Olsen skrev:

>> long: 8'889'816'378'327'602'678
>> int 1'420'465'654

>Tak, jeg skulle bare lige have verificeret at jeg ikke havde regnet galt
>selv og at det ikke havde noget med modulus at gøre ;)

Jamen det *har* det. Prøv selv at regne 8'889'816'378'327'602'678
MOD 2^32.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

James Olsen (17-05-2001)
Kommentar
Fra : James Olsen


Dato : 17-05-01 17:08


"Bertel Lund Hansen" <nospamto@lundhansen.dk> wrote in message
news:2ap7gtog13nmjjrg6mnts3s1lleip8rk5t@sunsite.auc.dk...
> James Olsen skrev:
>
> >> long: 8'889'816'378'327'602'678
> >> int 1'420'465'654
>
> >Tak, jeg skulle bare lige have verificeret at jeg ikke havde regnet galt
> >selv og at det ikke havde noget med modulus at gøre ;)
>
> Jamen det *har* det. Prøv selv at regne 8'889'816'378'327'602'678
> MOD 2^32.

Det er ikke sådan det fungere i Java - sorry to say. Det fungere præcist som
den gode Jonas Kongslund allerede har skrevet, man masker/smider de
"overflødige" bit væk.

Prøv følgende :

long l = Long.MAX_VALUE - 5;

System.out.println("Long : " + l);
System.out.println("Cast : " + (int)l);
System.out.println("Mod : " + (l % Math.pow(2,32)));

Resulat :

Long : 9223372036854775802
Cast : -6
Mod : 0.0


>
> --
> Bertel
> http://lundhansen.dk/bertel/ FIDUSO: http://fiduso.dk/



Bertel Lund Hansen (17-05-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 17-05-01 18:09

James Olsen skrev:

>Det er ikke sådan det fungere i Java - sorry to say.

Det skrev jeg heller ikke. Jeg skrev at det havde noget med det
at gøre. Hvis resultatet er positivt, giver et cast det samme som
en modulusberegning.

>Det fungere præcist som den gode Jonas Kongslund allerede har skrevet,

Korrekt. Men derfor kan man jo godt overveje at man (i nogle
tilfælde) kan lave en modulusberegning på præcis samme måde.

>Prøv følgende :

Det er ulogisk at bruge en double som divisor til en long. Prøv
dette i stedet:

long l = Long.MAX_VALUE - 5;
long tmp = 0x100000000L;

System.out.println("Long : " + l);
System.out.println("Cast : " + (int)l);
System.out.println("Mod : " + (l % tmp));

   Long : 9223372036854775802
   Cast : -6
   Mod : 4294967290

Men det giver ikke samme resultat som en cast. Jeg advarede jo
også i mit foregående svar mod negative værdier.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

James Olsen (17-05-2001)
Kommentar
Fra : James Olsen


Dato : 17-05-01 18:28


"Bertel Lund Hansen" <nospamto@lundhansen.dk> wrote in message
news:9318gtsbntnmmu8iivu4ti45dgdo5lthg6@sunsite.auc.dk...
> James Olsen skrev:
>
> >Det er ikke sådan det fungere i Java - sorry to say.
>
> Det skrev jeg heller ikke. Jeg skrev at det havde noget med det
> at gøre. Hvis resultatet er positivt, giver et cast det samme som
> en modulusberegning.

Du skrev præcist :

[Opslag i min Javabog ...]

Man *kan* stole på at der udføres en modulo-beregning med den nye types
maksimalværdi.

---

måske en ny bog var på sin plads eller ? BTW af ren nysgerrighed hvad er det
for en bog ?

> --
> Bertel
> http://lundhansen.dk/bertel/ FIDUSO: http://fiduso.dk/



Bertel Lund Hansen (17-05-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 17-05-01 19:46

James Olsen skrev:

>Du skrev præcist :
>Man *kan* stole på at der udføres en modulo-beregning med den nye types
>maksimalværdi.

Det siger du ikke? Hvem skrev så det her?

   Det er ikke helt præcist alligevel, selv om det var det
   der stod i min bog.

>måske en ny bog var på sin plads eller ?

Slet ikke. Se f.eks. Jacobs svar.
Måske skulle du sætte dig ind i hvad en modulusberegning gør?

>BTW af ren nysgerrighed hvad er det for en bog ?

The Complete Reference, Java2
Naughton & Schildt.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Jacob Bunk Nielsen (17-05-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 17-05-01 18:30

Bertel Lund Hansen <nospamto@lundhansen.dk> writes:

>    Cast : -6
>    Mod : 4294967290
>
> Men det giver ikke samme resultat som en cast. Jeg advarede jo
> også i mit foregående svar mod negative værdier.

Bitvist i 32 bit i to komplement repræsentation er -6 og 4294967290
faktisk det samme.

--
Jacob
Always remember that you are unique, just like everyone else.

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408941
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste