2009-12-16 76 views
32

Sự khác nhau thực sự giữa một số longint trong C# là gì? Tôi hiểu rằng trong C/C++ dài sẽ là 64bit trên một số nền tảng 64bit (tùy thuộc vào hệ điều hành của khóa học) nhưng trong C# đó là tất cả chạy trong thời gian chạy NET., Vì vậy, có một sự khác biệt thực sự?Sự khác biệt giữa dài và int trong C#?

Một câu hỏi khác: có thể int giữ long (bằng cách truyền) mà không làm mất dữ liệu trên tất cả nền tảng?

+0

Ngoài các câu trả lời, lưu ý rằng dài và int có hằng số MaxValue và MinValue tĩnh. –

+1

Tôi biết điều này nhưng tôi không chắc chắn nếu những thay đổi tùy thuộc vào nền tảng 32 bit và 64 bit .. Tìm kiếm trên google mang lại rất nhiều kết quả C/C++ .. – Earlz

+0

Nền tảng được trừu tượng hóa trong .NET, vì vậy bạn luôn có thời gian chạy nhất quán (đối với mã được quản lý, ít nhất) – thecoop

Trả lời

59

một int (aka System.Int32 trong thời gian chạy) luôn luôn là một ký 32 bit số nguyên trên nền tảng nào, một long (aka System.Int64) luôn luôn là một ký 64 bit số nguyên trên nền tảng nào. Vì vậy, bạn không thể truyền từ một số long với giá trị trên Int32.MaxValue hoặc bên dưới Int32.MinValue mà không làm mất dữ liệu.

+0

ok. nhưng tại sao trang này https://msdn.microsoft.com/en-us/library/296az74e.aspx hiển thị cùng một số từ MAX INT và MAX LONG ?? lỗi trên trang microsoft? – Vetras

+1

Đó là các loại C++, chứ không phải C# – thecoop

+0

Trang đầu tiên khi bạn google 'C# giá trị tối đa dài' là trang này - https://msdn.microsoft.com/en-us/library/296az74e.aspx - đó là KHÔNG cho C# . Đó là lý do tại sao OP hỏi câu hỏi. – K48

8

int là 32 bit trong .NET. long là 64 bit. Điều đó được đảm bảo. Vì vậy, không, int không thể giữ lâu mà không làm mất dữ liệu.

Có loại có kích thước thay đổi tùy thuộc vào nền tảng bạn đang chạy, là IntPtr (và UIntPtr). Điều này có thể là 32 bit hoặc 64 bit.

4

Chắc chắn là sự khác biệt - Trong C#, dài là số nguyên có dấu 64 bit, int là số nguyên có dấu 32 bit và đó là cách luôn luôn như vậy.

Vì vậy, trong C#, thời lượng dài có thể chứa int, nhưng int không thể giữ được lâu.

C/C++ câu hỏi đó phụ thuộc vào nền tảng.

4

Trong C#, một intSystem.Int32longSystem.Int64; trước đây là 32 bit và 64 bit sau đó.

C++ chỉ cung cấp đảm bảo mơ hồ về kích thước của int/long, khi so sánh (bạn có thể khai thác tiêu chuẩn C++ để biết chính xác, gory, chi tiết).

0

Tôi nghĩ rằng một int là một số nguyên 32 bit, trong khi một số nguyên dài là số nguyên 64 bit.

15

int trong C# => System.Int32 => từ -2,147,483,648 đến 2,147,483,647.

dài trong C# => System.Int64 => từ -9.223.372.036.854.775.808 đến 9.223.372.036.854.775.807

Nếu dữ liệu dài của bạn vượt quá phạm vi của int, và bạn sử dụng Convert.ToInt32 sau đó nó sẽ ném OverflowException, nếu bạn sử dụng diễn viên rõ ràng thì kết quả sẽ là bất ngờ.

Các vấn đề liên quan