2009-10-06 50 views
13

Hỗ trợ GCC:GCC có hỗ trợ lâu dài không?

long long int 

số nguyên 64 bit?

Ngoài ra, là long long int một phần của tiêu chuẩn?

+0

Cảm ơn tất cả mọi người, tôi đã không bao giờ chơi với dữ liệu 64 bit trước và tôi đang hoảng lười biếng tối nay. – Polaris878

+0

Lưu ý rằng trong môi trường C99, bạn nên sử dụng 'int64_t' trong' 'cho một số nguyên 64 bit di động. Nếu bạn không ở trong môi trường C99, 'long long' là đặt cược tốt nhất của bạn, nhưng nó không thực sự được bảo đảm rộng 64 bit. –

+0

ST: Vâng, nó * được * đảm bảo là * ít nhất * rộng 64 bit, vì vậy anh ta không nên lo lắng rằng một nơi nào đó ở ngoài đó <64. Tuy nhiên, không phải trong quá trình thực hiện phù hợp. – DigitalRoss

Trả lời

31

Có GCC hỗ trợ long long int, là một phần của tiêu chuẩn C99.

Các tiêu chuẩn không uỷ quyền kích thước của nó theo bit, nhưng cần giá trị của LLONG_MINLLONG_MAX trong <limits.h> hàm ý đó là ít nhất 64-bit (chính xác loại nguyên 64-bit rộng là int64_t/uint64_t từ <stdint.h>).

  1. LLONG_MIN phải có ít nhất -9223372036854775807
  2. LLONG_MAX phải có ít nhất 9223372036854775807
+1

Chỉ cần thêm .. Trong cửa sổ tương đương của nó sẽ là _int64 – vpram86

+7

Trên thực tế, để được nghiêm ngặt, nó là tương đương với int64_t từ (đó là C99 quá). –

+0

Tôi không bao giờ biết tiêu đề này! Cảm ơn! – vpram86

2

Tôi tin rằng thường là một unsigned long long là đại diện truyền thống của một số nguyên 64-bit. Tôi giả sử long long int cũng sẽ hoạt động, nhưng tôi chưa bao giờ đích thân thấy bất kỳ vars 64 bit nào được khai báo theo cách đó trước đây.

+2

'long long int' chỉ là một số nguyên 64 bit (hoặc nhiều hơn) đã ký. Không có gì đặc biệt bất thường về nó. – bdonlan

8

Trên máy tính 32-bit của tôi,

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

biên soạn với gcc in 8 (8 byte * 8 bit/byte = 64 bit).

+18

Chuỗi định dạng 'size_t' nên sử dụng' "% zu" 'không' "% d" '(tương tự,' ssize_t' phải sử dụng '"% zd "'). Đây là sự cố trên nền tảng 64 bit, trong đó size_t thường là loại 64 bit, trong khi int vẫn có thể là 32 bit. – bdonlan

+1

sizeof (char) == 1 theo định nghĩa nhưng được phép là> = một byte. Vì vậy, các loại 64 bit được phép có sizef (t) == 1. –

5

Có, long long là một phần của C99, cũng như long long hằng số (10222333444555LL) và một số yếu tố hỗ trợ. (LLONG_MAX, llrint(d), llround(d), một số loại khác.) Và gcc đã triển khai nó một thời gian.

5

Để in dài int biến dài:

long long int lli = 100000000; 

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

chờ đợi lâu được hỗ trợ tốt, và đã được một thời gian dài dài [xin lỗi]. Theo tôi hiểu nó, điều này cần phải có 128 bit trên nền tảng 64 bit, nhưng vì các lý do tương thích/tính di động trong GCC, đã được chuẩn hóa trên chiều rộng 64 bit.

Xem thêm: (u) int128_t, và điều này discussion on GCC's 128-bit integer support

+0

"điều này cần phải có 128 bit trên nền tảng 64 bit": chăm sóc để hỗ trợ xác nhận này theo bất kỳ cách nào? –

+0

Tôi đã nói, "như tôi hiểu nó". Tôi có thể hỗ trợ ý tưởng chỉ trong đó, như wikipedia nói, "Từ thuật ngữ được sử dụng cho một nhóm nhỏ các bit được xử lý đồng thời bởi các bộ vi xử lý của một kiến ​​trúc cụ thể. Do đó, kích thước của một từ cụ thể là CPU." Vì vậy, một cách hợp lý, một từ dài sẽ dài hơn trên một vòm rộng hơn. Tuy nhiên, từ cùng một trang wikipedia, tiêu chuẩn de facto dường như dài từ lâu đến 64 bit. http://en.wikipedia.org/wiki/Integer_%28computer_science%29 –