2009-10-06 12 views
13

Czy GCC wsparcia:Czy GCC obsługuje długie długie int?

long long int 

który byłby 64-bitową liczbę całkowitą?

Co więcej, czy część standardu to long long int?

+0

Dzięki wszystkim, nigdy nie grał z 64-bitowych danych przed i jestem cholernie leniwy dzisiaj. – Polaris878

+0

Należy zauważyć, że w środowisku C99 należy użyć 'int64_t' w' 'dla przenośnej 64-bitowej liczby całkowitej. Jeśli nie znajdujesz się w środowisku C99, "long long" to najlepsza opcja, ale nie gwarantuje się, że ma szerokość 64 bitów. –

+0

ST: Cóż, to * ma * gwarantowane * co najmniej * 64-bity szerokości, więc nie powinien się martwić, że gdzieś tam jest <64. W każdym razie nie w zgodnej implementacji. – DigitalRoss

Odpowiedz

31

Tak, GCC obsługuje long long int, który jest częścią standardu C99.

standard nie określa jego wielkości w bitach, ale wymagane wartości LLONG_MIN i LLONG_MAX w <limits.h> oznaczać to przynajmniej 64-bitowe (dokładne 64-bitowe liczby całkowite są int64_t/uint64_t z <stdint.h>).

  1. LLONG_MIN musi wynosić co najwyżej -9223372036854775807
  2. LLONG_MAX musi wynosić co najmniej 9223372036854775807
+1

Wystarczy dodać .. W oknach jego odpowiednik będzie _int64 – vpram86

+7

W rzeczywistości, aby być ścisłym, jest to odpowiednik int64_t z (co jest także C99). –

+0

Nigdy nie znam tego nagłówka! Dzięki! – vpram86

2

wierzę, że zwykle unsigned long long jest tradycyjnym przedstawieniem 64-bitowej liczby całkowitej. Zakładam, że też zadziałałoby long long int, ale nigdy osobiście nie widziałem żadnych 64-bitowych vars zadeklarowanych w ten sposób wcześniej.

+2

'long long int' to po prostu podpisana 64-bitowa (lub więcej) liczba całkowita. Nic szczególnie nietypowego w tym. – bdonlan

8

moim komputerze 32-bitowym

int main() 
{ 
    printf("%d\n", sizeof(long long int)); 
    return 0; 
} 

skompilowany gcc drukuje 8 bajtów (8 * 8 bit/bajt = 64 bity).

+18

Łańcuchy 'size_t' powinny używać' "% zu" 'not' "% d" '(podobnie,' ssize_t' musi używać '"% zd "'). Jest to problem na platformach 64-bitowych, gdzie size_t jest często typu 64-bitowego, podczas gdy int może nadal być 32-bitowe. – bdonlan

+1

sizeof (char) == 1 z definicji, ale dozwolone jest> = jeden bajt. Tak więc typy 64-bitowe mogą mieć sizef (t) == 1. –

5

Tak, long long jest częścią C99, a także long long stałych (10222333444555LL) oraz kilkoma elementami wsparcia. (LLONG_MAX, llrint(d), llround(d), kilka innych.) I gcc zaimplementował to od jakiegoś czasu.

5

W celu wydrukowania long long int zmiennych:

long long int lli = 100000000; 

printf("%lld\n", lli); 
4

long long są dobrze obsługiwane, i zostały przez długi długi czas [przepraszam]. Jak rozumiem, powinno to być 128-bitowe na platformach 64-bitowych, ale ze względu na kompatybilność/przenośność w GCC, ustandaryzował na 64-bitowej szerokości.

Zobacz również: (u) int128_t, a to discussion on GCC's 128-bit integer support

+0

"powinno to być 128-bitowe na platformach 64-bitowych": czy w jakikolwiek sposób wspierać tę afirmację? –

+0

Powiedziałem: "jak to rozumiem". Mogę poprzeć ten pomysł tylko tym, o czym mówi wikipedia: "Termin słowo jest używany dla małej grupy bitów, które są obsługiwane jednocześnie przez procesory określonej architektury, dlatego rozmiar słowa jest zależny od procesora." Logicznie rzecz biorąc długie słowo byłoby dłuższe na szerszym łuku. Jednak z tej samej strony wikipedii de facto standard wydaje się być tak długi, że jest 64-bitowy. http://pl.wikipedia.org/wiki/Integer_%28computer_science%29 –