2011-12-24 22 views
5

Tôi hơi bối rối về thời gian làm việc của C.Làm thế nào để sử dụng loại dữ liệu dài trong C?

Nếu tôi yêu cầu giá trị tối đa của một số lượng lớn trong Java, tôi nhận được một số trong nhóm. Nếu tôi yêu cầu nó trong C, đã ký hoặc chưa ký, thì nó bằng hàng tỷ.

Java được xây dựng trên C ... vậy sự khác biệt đến từ đâu?

Tôi cũng đã cố gắng trình bày các giá trị dài với giá trị dài, không ký/dài và giá trị int dài. Không ai trong số họ dường như xử lý các con số vượt quá hàng tỷ tỷ. Tại sao? Tôi có mắc lỗi không?

+1

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

Trả lời

10

Chuẩn C xác định long ít nhất cũng bằng int. Kích thước thực tế phụ thuộc vào việc triển khai thực hiện. Đây không phải là trường hợp cho Java, trong đó long được yêu cầu phải dài 64 bit.

Chuẩn C99 định nghĩa các kiểu số nguyên cố định như int64_t được xác định trong stdint.h mà bạn có thể sử dụng nếu bạn cần số nguyên kích thước cố định trên tất cả các nền tảng.

+0

Chỉ cần thêm nhận xét: Nó thường phụ thuộc vào các bit của hệ điều hành của bạn, nhưng tất nhiên không nhất thiết phải như vậy. – Dimme

+0

Tôi có thể sử dụng 64bit dài trong thư viện C chuẩn không? – bgroenks

+1

@ ghostsoldier23 Bạn có thể sử dụng 64 dài cho các thư viện có giá trị 64 bit, thường yêu cầu chương trình của bạn được biên dịch thành 64 bit, ví dụ: khi 'size_t' là 64 bit. –

2

C cũng có loại long long. Đó là một trong những đảm bảo được ít nhất 64 bit.

+0

C99 định nghĩa 'dài dài int' để được _at minimum_ có thể giữ 64 bit ký số nguyên và lớn hơn kích thước của' long int'. Nó không nhất thiết là 64 bit. –

+0

@MehrdadAfshari, đúng, tôi không đủ chính xác, cảm ơn, đã thay đổi. –

+0

@Mehrdad: bạn đã nói, trong thực tế, kích thước của 'dài int' phải nghiêm ngặt lớn hơn kích thước của 'long int'; đúng không? Chắc chắn, việc triển khai phù hợp có thể cung cấp 'dài int' có cùng kích thước với' long int'; kích thước của 'long long int' không thể nhỏ hơn kích thước của' long int'. –

0

Nếu bạn muốn làm việc với số lớn hơn, bạn có thể sử dụng Thư viện GNU MP Bignum tại đây: http://gmplib.org/ Số và độ chính xác chỉ bị giới hạn bởi bộ nhớ khả dụng của máy chạy.