Jak to jest z tym unsigned long long?

szukaj na forum nowy temat odpowiedz

Strona [ 1 ] z 1

kebilol ten post 08-02-2010 21:49


Użytkownik
Status: Offline
Dołączył: 17-01-2010
Skąd: Skrzyszów
Jak to jest dokładnie z tym unsigned long longiem? Gdy dam
unsigned long long a = 999999999; to śmiga...
Ale gdy dam już unsigned long long a = 99999999999; to mi dev wyrzuca, że się nie mieści...
Poza tym skoro ten typ ma taki mega zakres to dlaczego nie jest w stanie obliczyć potęgi zmiennej "a" z przykładu pierwszego? Chodzi mi o b *= b; printf("%d\n", b); i nie wypisuje mi całej liczby tylko zaledwie 10 cyfr i to chyba nawet coś knoci w trakcie...

Ostatnio zmodyfikowany: 08-02-2010 21:54 przez kebilol
Przejdź na górę strony
cytuj
Shalom ten post 08-02-2010 22:07
avatar

Użytkownik
Status: Offline
Dołączył: 30-01-2004
Skąd: Będzin / Kraków
printf("%d\n", b);

a teraz z laski swojej otwórz dokumentację i poczytaj sobie na temat tych przełączników jak %d, %ld, %hd itd.
Non nascuntur sed fiunt christiani :)
Nie masz kłopotów? Kup komputer...

[Na prv/gg przyjmuje tylko zlecenia. Masz problem? Pisz na forum, nie do mnie]
Przejdź na górę strony
cytuj
bswierczynski ten post 08-02-2010 22:08


Użytkownik
Status: Offline
Dołączył: 29-09-2009

C, czy C++? (Używaj tagów [C] lub [C++] w nazwie tematu!)

U mnie np. unsigned long long nie jest w ogóle wspierany, bo long long to opcjonalny typ. Z kolei kompilator C wyświetla mi sizeof (unsigned long long) jako 8. Czyli maksymalna wartość powinna wynosić 2^64 (bo w bitach, 8 bajtów * 8 bitów = 64) minus 1, bo liczymy od zera, czyli w sumie:

18446744073709551615
999999999   /* Twój przykład #1 */
99999999999 /* Twój przykład #2 */


Twoje przykłady spokojnie się mieszczą i mój kompilator je puszcza.

Weź sobie może zobacz co Ci zwraca sizeof dla tych typów. I ewentualnie sprawdź z limits.h lub climits(.h), tam *możesz* mieć zdefiniowane ULLONG_MAX.

Może też kompilator z dev cpp potrzebuje jakiejś podpowiedzi? Weź mu dodaj do 99999999999 postfix ULL, czyli 99999999999ULL.
Przejdź na górę strony
cytuj
deus. ten post 08-02-2010 22:09





@bswierczynski, W C++ long long w ogóle nie istnieje, wejdzie dopiero w C++0x, którego pewnie nie doczekam (nie wiem jak Ty)...
Przejdź na górę strony
cytuj
bswierczynski ten post 08-02-2010 22:29


Użytkownik
Status: Offline
Dołączył: 29-09-2009

@deus.
Hmm, skoro tak mówisz, to tak pewnie jest. Niedawno gdzieś to przeglądałem (na cplusplusreference.com chyba) i tam pisali, że long long może być opcjonalnie wspierany. Czyli: specyfikacja rozpoznaje taki typ, ale nie wymusza na implementacjach jego wspierania. Może więc w praktyce coś takiego w kompilatorach C++ nie występuje (jak pisałem -- w moim nie występowało).

A co do C++0x to ja również pewnie umrę zanim wejdzie. I nie wiem, czy to dobrze czy źle ;).
Przejdź na górę strony
cytuj
deus. ten post 08-02-2010 22:45





Nie, to jest tak - najnowszy standard C++ (ISO IEC 14882-2003) nie przewiduje istnienia long long, najnowszy standard C (ISO IEC 9898-99) tak. W efekcie kompilatory wspierające C/C++ wspierają long long z rozpędu, ale przy wymuszeniu zgodności z C++ popularne (GCC, Comeau, Intel, poza CL z Visuala) przyjęcia long long odmawiają.
Przejdź na górę strony
cytuj
szukaj na forum nowy temat odpowiedz

Strona [ 1 ] z 1

1 użytkownik(ów) przegląda ten temat (1 gości)
(żadnych zarejestrowanych użytkowników)

Copyright © 2000-2006 by Coyote Group 0.9.3-pre3
Czas generowania strony: 0.0212 sek. (zapytań SQL: 9)