Làm thế nào là ngắn int (hoặc ngắn) và int khác nhau trong C? Họ có cùng kích thước và phạm vi. Nếu về cơ bản chúng giống nhau, việc sử dụng hai loại dữ liệu là gì?Sự khác nhau giữa "int ngắn" và "int" trong C là gì?
Trả lời
Họ có thể có cùng kích thước, nhưng đảm bảo rằng int
bằng hoặc lớn hơn short int
.
Điều thực sự được đảm bảo là * phạm vi * của 'short int' ít nhất là -32767 .. +32767 và phạm vi' int 'ngắn là một tập con của phạm vi' int'. Nó bắt nguồn từ điều này mà 'int' ngắn và 'int' đều là ít nhất 16 bit. Do các bit đệm, về mặt lý thuyết có thể có 'sizeof (short int)> sizeof (int)', nhưng rất khó xảy ra. –
@KeithThompson bạn có thể giải thích về 'sizeof (int ngắn)> sizeof (int)'? – SomeWittyUsername
@icepack: Các loại số nguyên có thể có các bit đệm, các bit không đóng góp vào giá trị. Ví dụ, một thực hiện phù hợp có thể * theo lý thuyết * có 'short' với 32 bit (16 bit của chúng) và' int' với 24 bit (tất cả là quan trọng). Tôi không thể nghĩ ra bất kỳ lý do nào để làm một điều ngớ ngẩn như vậy, nhưng tiêu chuẩn không cấm nó. –
"Một số nguyên ngắn trong một ngôn ngữ lập trình có thể là một kích thước khác nhau bằng một ngôn ngữ khác nhau hoặc trên một bộ xử lý khác nhau. Trong một số ngôn ngữ kích thước này là cố định trên nền tảng, trong khi ở những người khác nó là máy phụ thuộc vào Trong một số ngôn ngữ, kiểu dữ liệu này không tồn tại ở tất cả. "
Nhưng câu hỏi là về C. –
Yup và liên kết nguồn được đăng cho thấy sự khác biệt cho C, C++, C# và Java. – Ljdawson
Phần bạn trích dẫn không trả lời câu hỏi. (BTW, đoạn đó sau đó đã bị xóa khỏi bài viết.) –
Nó phụ thuộc vào hệ thống. Một số hệ điều hành sẽ không có cùng độ dài cho cả hai loại.
Không bao giờ dựa vào kiểu dữ liệu là một kích thước nhất định trong C. Luôn kiểm tra giới hạn trong giới hạn.h nếu nghi ngờ.
Ngoại trừ, tất nhiên, nếu bạn đang sử dụng 'uint32_t' và bạn bè từ '
Đó là một phần của tiêu chuẩn C99 đưa chúng ta trở lại câu hỏi được đưa ra bởi những người khác lại những gì OS/trình biên dịch đang được sử dụng. –
Thực ra mọi thứ đều phụ thuộc vào trình biên dịch và cả hệ thống. Nhưng quy tắc cơ bản nói rằng int không bao giờ có thể ngắn hơn và không bao giờ có thể dài hơn.
ngắn < = int < = dài
Về lý thuyết/theo tiêu chuẩn C, họ có thể là của bất kỳ kích thước chừng nào short <= int
.
Trong thế giới thực, đây là cách các kích thước được triển khai.
CPU short int
8 bit 16 16
16 bit 16 16
32 bit 16 32
64 bit 16 32
Bạn đã kiểm tra nó trong ansi c trong linux trong 64 bit và studio trực quan trong cửa sổ trong 64 bit tôi chỉ muốn biết .. –
@BharatSharma 64 bit chỉ tạo sự khác biệt với kích thước của 'long' và' long long'.Rõ ràng một số hệ thống 64 bit xác định dài 64 bit, trong khi các hệ thống khác thực hiện chuẩn C99/C11 và sử dụng 'long long' cho 64 bit, để' dài' là 32 bit. – Lundin
cảm ơn thực sự một khi tôi tìm thấy vấn đề liên quan đến lâu vì vậy tôi đã suy nghĩ rằng cũng có thể có thể ngắn ... :) –
Tất cả những gì bây giờ cho chắc chắn chúng tôi là:
2 <= sizeof(short) <= sizeof(int)
5.2.4.2.1 kích cỡ của các loại nguyên <limits.h>
cho các kích thước tối thiểu:
1 [...] Thei r giá trị thực hiện xác định được tính bằng hoặc lớn hơn trong độ lớn (giá trị tuyệt đối) cho những thể hiện [...]
- UCHAR_MAX 255 // 08-ngày 01 tháng 2
- USHRT_MAX 65535 // 16-ngày 01 tháng 2
- UINT_MAX 65535 // ngày 16-ngày 01 tháng 2
- ULONG_MAX 4294967295 // 2 32-1
- ULLONG_MAX 18446744073709551615 // 2 64 - 1
6.2.5 loại sau đó nói:
8 Đối với bất kỳ hai loại nguyên với signedness giống nhau và khác nhau rank chuyển đổi số nguyên (xem 6.3.1.1), phạm vi của các giá trị của các loại với cấp bậc chuyển đổi số nguyên nhỏ hơn là một sắp xếp các giá trị của loại khác.
và 6.3.1.1 Boolean, ký tự, và số nguyên xác định chuyển đổi tương đối đứng:
1 Mỗi kiểu dữ liệu integer có rank chuyển đổi số nguyên quy định như sau:
- Các xếp hạng của int dài dài sẽ lớn hơn xếp hạng của int dài, trong đó phải lớn hơn thứ hạng của int, mà phải lớn hơn xếp hạng ngắn int, whi ch sẽ lớn hơn xếp hạng char đã ký.
- Thứ hạng của bất kỳ loại số nguyên không dấu nào sẽ bằng với thứ hạng của loại số nguyên tương ứng đã ký, nếu có.
- Đối với tất cả các loại nguyên T1, T2 và T3, nếu T1 có thứ tự lớn hơn T2 và T2 có thứ tự lớn hơn T3, sau đó T1 có thứ tự lớn hơn T3
Tôi đã làm việc trên cùng ngày hôm nay. Kết luận của tôi là nó phụ thuộc vào độ dài từ của kiến trúc máy mà chương trình của bạn đang được thực thi. Theo tài liệu giới hạn C99.h.
/* Minimum and maximum values a `signed short int' can hold. */
# define SHRT_MIN (-32768)
# define SHRT_MAX 32767
/* Maximum value an `unsigned short int' can hold. (Minimum is 0.) */
# define USHRT_MAX 65535
/* Minimum and maximum values a `signed int' can hold. */
# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647
/* Maximum value an `unsigned int' can hold. (Minimum is 0.) */
# define UINT_MAX 4294967295U
/* Minimum and maximum values a `signed long int' can hold. */
# if __WORDSIZE == 64
# define LONG_MAX 9223372036854775807L
# else
# define LONG_MAX 2147483647L
# endif
# define LONG_MIN (-LONG_MAX - 1L)
/* Maximum value an `unsigned long int' can hold. (Minimum is 0.) */
# if __WORDSIZE == 64
# define ULONG_MAX 18446744073709551615UL
# else
# define ULONG_MAX 4294967295UL
# endif
Hãy cho tôi biết nếu có ai có câu trả lời tốt hơn.
chỉ để thêm thử này –
ngắn int i = 2147483647; \t printf ("% d% d% d \ n", i, i + 1, i + 10); –
int i = 2147483647; \t printf ("% d% d% d \ n", i, i + 1, i + 10); –
- 1. Sự khác nhau giữa int x = 1 và int x (1) trong C++ là gì?
- 2. Sự khác nhau giữa int (* p) [3] và int * p [3] là gì?
- 3. Sự khác biệt giữa int * ptr và int * ptr trong C là gì?
- 4. Sự khác nhau giữa double a = a + int b và int a + = double b là gì?
- 5. Sự khác nhau giữa việc sử dụng int [] [] và int [,] là gì?
- 6. Sự khác nhau giữa int [] array và int array []
- 7. Sự khác nhau giữa unsigned long/long/int trong c/C++ là gì?
- 8. Sự khác biệt giữa int * i và int ** i
- 9. Sự khác biệt thực sự giữa "int" và "unsigned int"
- 10. Sự khác biệt giữa dài và int trong C#?
- 11. sự khác biệt giữa int * i và int * i
- 12. Sự khác nhau giữa Int và Integer trong Scala là gì?
- 13. Sự khác nhau giữa “int” và “uint”/“long” và “ulong” là gì?
- 14. Sự khác biệt giữa các biến cục bộ auto int a và int a là gì?
- 15. Sự khác nhau giữa int và int nhận bởi parseInt trong java
- 16. Sự khác biệt giữa size_t và int trong C++ là gì?
- 17. Sự khác nhau giữa con trỏ float và địa chỉ con trỏ int là gì?
- 18. Sự khác nhau giữa Ctrl-C và SIGINT là gì?
- 19. C: sự khác biệt giữa (int) x và tầng (x)?
- 20. Sự khác nhau giữa C# và visual C# là gì?
- 21. Sự khác biệt giữa int và số nguyên trong MySQL 5.0 là gì?
- 22. Sự khác nhau giữa sizeof và alignof là gì?
- 23. Sự khác nhau giữa C#, .NET và CLI là gì?
- 24. Sự khác nhau giữa Objective-C và Cocoa là gì?
- 25. Sự khác biệt giữa int, NSInteger và NSUInteger
- 26. Sự khác biệt giữa chính void và int chính?
- 27. Sự khác biệt giữa khai báo int và int đã ký
- 28. C/C++ int [] so với int * (con trỏ so với ký hiệu mảng). Sự khác biệt là gì?
- 29. Sự khác nhau giữa sysfs_create_file() và sysfs_create_group() là gì?
- 30. Sự khác biệt giữa mảng int * và mảng int [] trong tham số hàm
Trong trình biên dịch 16 bit, chúng có cùng kích thước và dải ô. Thực tế tất cả các trình biên dịch hiện đại cho các nền tảng chính thống có 'sizeof (int)> sizeof (viết tắt)'. –