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

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
DWORD 0L ??
Fra : Poul S. Sørensen


Dato : 13-02-05 09:34

Hej NG

I følgende eksempel:

DWORD m_dwNum;
m_dwNum = 0L;

hvad betyder bogstavet L som står ved siden af 0-tallet? I hvilken
sammenhæng kan man bruge den i C++

På forhånd tak...

--
/Poul S.



 
 
René (13-02-2005)
Kommentar
Fra : René


Dato : 13-02-05 10:24

> I følgende eksempel:
>
> DWORD m_dwNum;
> m_dwNum = 0L;
>
> hvad betyder bogstavet L som står ved siden af 0-tallet? I hvilken
> sammenhæng kan man bruge den i C++
>
> På forhånd tak...
>
L betyder at du laver det til en Long integer (kan ikke huske om det er det
samme som DWORD)

Mvh
René



Bertel Brander (13-02-2005)
Kommentar
Fra : Bertel Brander


Dato : 13-02-05 14:54

Poul S. Sørensen wrote:
> Hej NG
>
> I følgende eksempel:
>
> DWORD m_dwNum;
> m_dwNum = 0L;
>
> hvad betyder bogstavet L som står ved siden af 0-tallet? I hvilken
> sammenhæng kan man bruge den i C++

Som René skriver bruges det til at fortælle at 0 skal opfattes
som en long. Med et 0 har det ikke den store betydning.

Men hvis man skriver:

long x = 1 << 19;

og int er 16 bit har man et problem. For 1 << 19 vil blive
evalueret som int's, da en integer konstant er af typen int
og resultatet vil være undefined.

Man kan også bruge:
unsigned long y = 10000000UL;

--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

Jesper Louis Anderse~ (13-02-2005)
Kommentar
Fra : Jesper Louis Anderse~


Dato : 13-02-05 15:20

Bertel Brander <bertel@post4.tele.dk> wrote:

> Men hvis man skriver:
>
> long x = 1 << 19;
>
> og int er 16 bit har man et problem. For 1 << 19 vil blive
> evalueret som int's, da en integer konstant er af typen int
> og resultatet vil v?re undefined.

I det hele taget er dette en kedelig historie i C. Stoerrelsen af
forskellige typer er ret daarligt defineret, med mindre at man
tager fat i diverse standarder for det. Hvis man ikke vil et i de
kritiske tilfaelde taber man portabiliteten.

--
jlouis

Poul S. Sørensen (13-02-2005)
Kommentar
Fra : Poul S. Sørensen


Dato : 13-02-05 16:15


"Bertel Brander" <bertel@post4.tele.dk> skrev i en meddelelse
news:420f5bf4$0$33661$edfadb0f@dread16.news.tele.dk...

> Som René skriver bruges det til at fortælle at 0 skal opfattes
> som en long. Med et 0 har det ikke den store betydning.
>
> Men hvis man skriver:
>
> long x = 1 << 19;
>
> og int er 16 bit har man et problem. For 1 << 19 vil blive
> evalueret som int's, da en integer konstant er af typen int
> og resultatet vil være undefined.
>
> Man kan også bruge:
> unsigned long y = 10000000UL;
>

ok, men vil det sige at når jeg f.eks. skriver:

m_dwNum = 3L;

så i virkeligheden står der 000003 ?


/poul



Bertel Brander (13-02-2005)
Kommentar
Fra : Bertel Brander


Dato : 13-02-05 17:33

Poul S. Sørensen wrote:
> ok, men vil det sige at når jeg f.eks. skriver:
>
> m_dwNum = 3L;
>
> så i virkeligheden står der 000003 ?

Nej.

Hvis din kompiler har 16bit int og du skriver:
long x = 0x10002;

Så vil x være 2, og ikke 0x10002

Og hvis du skriver:

int y = 0x100;
long z = y*0x1000;

Så vil z være 0.

Alt dette fordi en kompiler pr. default regner med int,
så alt til højre for = vil blive regnet som int, og
resultatet vil derefter blive lagt over i en long.
En long er altid mindst 32 bit, men en int kan være
16 bit, eller mere.

Det er det samme med:
double d = 1/2;

Her regner den 1/2 ud som int's og d vil derfor blive 0.

De fleste kompilere i vore dage har 32 bit int og
32 bit long, og så er problemet der ikke.

--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

Poul S. Sørensen (13-02-2005)
Kommentar
Fra : Poul S. Sørensen


Dato : 13-02-05 21:29

"Bertel Brander" <bertel@post4.tele.dk> skrev i en meddelelse
news:420f811c$0$33724$edfadb0f@dread16.news.tele.dk...

> Det er det samme med:
> double d = 1/2;
>
> Her regner den 1/2 ud som int's og d vil derfor blive 0.
>
> De fleste kompilere i vore dage har 32 bit int og
> 32 bit long, og så er problemet der ikke.
>
>

ja,, nu forstår jeg grunden, og min compiler er VC6, så der burde ikke være
nogen problemer.
Men når jeg prøver følgende:

unsigned long fp = 1UL/2UL;
printf( "Resultat :\n\t%f\n", fp);

så er resultatet stadig 0.000000 .. Hvorfor det?



Bertel Brander (13-02-2005)
Kommentar
Fra : Bertel Brander


Dato : 13-02-05 22:02

Poul S. Sørensen wrote:
> unsigned long fp = 1UL/2UL;
> printf( "Resultat :\n\t%f\n", fp);
>
> så er resultatet stadig 0.000000 .. Hvorfor det?
>

Fordi divisionen bliver foretaget i heltal, og der rundes
ned (trunkeres).

Hvis du vil have det til at give 0.5 bruger du: 1.0/2
Hvis et af tallene er double bliver beregningen foretaget
i double.

Men en long kan ikke være 0.5, long er heltal.

Så du bør bruge:
double d = 1.0/2;

Bemærk at man bruger %l til at udskrive long, %f er for
float og double:

printf( "Resultat :\n\t%f\n", d);

--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

Poul S. Sørensen (13-02-2005)
Kommentar
Fra : Poul S. Sørensen


Dato : 13-02-05 22:12

"Bertel Brander" <bertel@post4.tele.dk> skrev i en meddelelse
news:420fc034$0$48729$edfadb0f@dread15.news.tele.dk...

> Fordi divisionen bliver foretaget i heltal, og der rundes
> ned (trunkeres).
>
> Hvis du vil have det til at give 0.5 bruger du: 1.0/2
> Hvis et af tallene er double bliver beregningen foretaget
> i double.
>
> Men en long kan ikke være 0.5, long er heltal.
>
> Så du bør bruge:
> double d = 1.0/2;
>
> Bemærk at man bruger %l til at udskrive long, %f er for
> float og double:
>
> printf( "Resultat :\n\t%f\n", d);


Ok, mange tak for hjælpen!

M.v.h.
Poul



Bertel Brander (13-02-2005)
Kommentar
Fra : Bertel Brander


Dato : 13-02-05 22:16

> Bemærk at man bruger %l til at udskrive long
>

Og her skulle der naturligvis stå:
Bemærk at man bruger %ld til at udskrive long.

--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

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

Månedens bedste
Årets bedste
Sidste års bedste