Jak to jest z tym unsigned long long?
Strona [ 1 ] z 1
| kebilol |
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 |
|
|
| Shalom |
08-02-2010 22:07 |
|
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] |
|
|
| bswierczynski |
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. |
|
|
| deus. |
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)... |
|
|
| bswierczynski |
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 .
|
|
|
| deus. |
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ą. |
|
|
|
|
|
Strona [ 1 ] z 1
| 1 użytkownik(ów) przegląda ten temat (1 gości) |
|---|
| (żadnych zarejestrowanych użytkowników) |












.