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?
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?
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_MIN
và LLONG_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>
).
LLONG_MIN
phải có ít nhất -9223372036854775807
LLONG_MAX
phải có ít nhất 9223372036854775807
long long int
là một phần của tiêu chuẩn C99 và tôi biết GCC hỗ trợ nó. And now I can prove it.
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.
'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
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).
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
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. –
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.
Để in dài int biến dài:
long long int lli = 100000000;
printf("%lld\n", lli);
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
"đ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? –
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 –
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
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. –
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