problem z zakresem dla zmiennej long int

0

Hej. Według http://pl.wikipedia.org/wiki/Liczba_ca%C5%82kowita_%28typ_danych%29
zmienna long int przyjmuje następujące wartości:

−2 147 483 648 — +2 147 483 647 (ze znakiem)
0 — +4 294 967 295 (bez znaku)

Korzystam z codeblocks 10.05 ale w dev to samo i to chyba nie powinno robić różnicy, ale nie mogę uzyskać takich zakresów zmiennych. Przykładowo jeżeli zrobię tak

long int x = 99301728369

i wyświetlam wartość zmiennej x

printf("x=%d",x);

To przez printf wyświetla mi wartość x=517480561. Zastosowanie long long int nic nie zmienia. Nie wiem... może zamiast %d należy użyć czegoś innego ? Dlaczego nie działa ?

0
Endrju napisał(a)
printf("x=%ld",x);

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

Widziałem tę stronkę już wcześniej i nie działa to u mnie... próbowałem już wcześniej.

Próbowałem też tam wstawić u a nawet przy deklaracji liczby na końcu wstawiłem L jak w przykładzie i też nie wyświetla poprawnie...

Tak jest źle:

     long int x = 99301728369;
    printf("x=%ld",x);

Tak też jest źle (dodałem L na koniec jak w przykładzie na cplusplus):

     long int x = 99301728369L;
    printf("x=%ld",x);

Zawsze wyświetla ten sam wynik czyli x=517480561, dlaczego ?

0

sam wyżej napisałeś że zakres long jest do 2147483647, a nagle chcesz przypisać liczbę 50 razy większą.

0
Azarien napisał(a)

sam wyżej napisałeś że zakres long jest do 2147483647, a nagle chcesz przypisać liczbę 50 razy większą.

ehh gapa ze mnie, dzięki wam chłopaki za pomoc. a moglibyście mi napisać jeszcze kiedy te duże "L" się stosuje ? na cplusplus używają tego w taki sposób (w przykładzie na stronie):

printf ("Decimals: %d %ld\n", 1977, 650000L);

W jakim celu po cyferkach wstawili duże L skoro wg. opisu L-ki:

<quote>The argument is interpreted as a long double (only applies to floating point specifiers: e, E, f, g and G). /quote>

Jak jedno ma się do drugiego ?

0

Pod Windows int i long int są identyczne, i mają 32-bity. Więc nie będzie żadnej różnicy czy z L czy bez.
Ale są systemy gdzie int ma 32 bity a long int 64 bity. Wtedy znowu long i long long są identyczne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1