Jak to jest z tym unsigned long long?

0

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...

0

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.

0

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.

0

@bswierczynski, W C++ long long w ogóle nie istnieje, wejdzie dopiero w C++0x, którego pewnie nie doczekam (nie wiem jak Ty)...

0

@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 ;).

0

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ą.

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