2011-12-24 11 views
5

Jestem trochę zdezorientowany, jak długo pracuje w C.Jak używać typu Długie dane w C?

Jeśli poprosić o maksymalną wartość długo w Java otrzymuję liczbę w quintillions. Jeśli zapytam o to w C, podpisane lub niepodpisane, to w miliardach.

Java jest zbudowana na C ... więc skąd się bierze różnica?

Próbowałem również reprezentować literały z długich wartości długich, unsigned/signed długich wartości i długich wartości int. Żadne z nich nie radzi sobie z liczbami z ostatnich miliardów. Czemu? Czy popełniam błąd?

+1

http://pl.wikipedia.org/wiki/Integer_(computer_science) –

Odpowiedz

10

Standard C określa long na co najmniej tak duży jak int. Rzeczywisty rozmiar zależy od implementacji. Nie dotyczy to środowiska Java, w którym wymagana jest długość 64 bitów.

Standard C99 definiuje stałe typy liczb całkowitych, takie jak int64_t zdefiniowane w stdint.h, których można użyć, jeśli potrzebujesz stałych liczb całkowitych na wszystkich platformach.

+0

Wystarczy, aby dodać komentarz: Zwykle zależy to od bitów systemu operacyjnego, ale oczywiście nie musi tak być. – Dimme

+0

Czy mogę używać 64-bitowej długości w standardowej bibliotece C? – bgroenks

+1

@ ghostsoldier23 Do bibliotek, które pobierają wartości 64-bitowe, można użyć 64-krotnie, co zwykle wymaga kompilacji 64-bitowego programu, np. gdy 'size_t' jest 64-bitowe. –

2

C ma również typ long long. Ten ma co najmniej 64-bitową wartość.

+0

C99 definiuje 'long long int', aby _at co najmniej_ było w stanie pomieścić 64-bitowe liczby całkowite ze znakiem i większe niż rozmiar' long int'. To niekoniecznie jest 64-bitowe. –

+0

@MehrdadAfshari, racja, nie byłem wystarczająco precyzyjny, dzięki, zmieniłem się. –

+0

@Mebrad: w efekcie powiedziałeś, że rozmiar 'long long int' musi być ściśle większy niż rozmiar' long int'; czy to jest poprawne? Z pewnością zgodna implementacja może zapewnić 'long long int' o tej samej wielkości co' long int'; rozmiar 'long long int' nie może być mniejszy niż rozmiar' long int'. –

0

Jeśli chcesz pracować z większymi liczbami można użyć MP Bignum biblioteki GNU tutaj: http://gmplib.org/ numery i precyzji jest ograniczona tylko przez dostępną pamięć urządzenia, które działa na.