Miền giá trị của int

int có 2 miền giá trị vậy khi nào dùng 32767, khi nào dùng 2147483647 ? Nếu khai bào bình thường thì biến sẽ nhận miền giá trị nào ạ ? (VD: int a;). Em thì nghĩ 32767 dùng trong ±*/ còn 2147483647 thì dùng trong biến đếm. Không biết có đúng ko ạ ?

Ngôn ngữ nào vậy bạn?
C++ có các kiểu mặc định, nếu không override thì nó thế này:
int: 4bytes: -2147483648 to 2147483647
unsigned int: 4bytes: 0 to 4294967295
signed int: 4bytes: -2147483648 to 2147483647
short int: 2bytes: -32768 to 32767
unsigned short int: 2bytes: 0 to 65,535
signed short int: 2bytes: -32768 to 32767
long int: 8bytes: -2,147,483,648 to 2,147,483,647
signed long int: 4bytes: -2,147,483,648 to 2,147,483,647
unsigned long int: 4bytes: 0 to 4,294,967,295

dạ ngôn ngữ C, mà chắc C giống C++. Cám ơn bạn :))

C hay C++ gì thì mấy thằng int cũng không có cố định nha
Trả lời luôn câu hỏi của @Chicken_Rookie là nó phụ thuộc và kiến trúc của máy tính chứ không phải là trong trường hợp sử dụng. Giờ thì hầu hết int đều 4 byte cả.

2 Likes

Nó phải gán giá trị này giá trị kia chứ không thể đang ở máy A, cài cùng HĐH, cùng IDE thì chạy được, sang máy B cài cùng HĐH, cùng IDE thì tràn bộ nhớ.
Tất nhiên là nó không cố định rồi, như mình nói là trong trường hợp mặc định, ta không định nghĩa lại thì nó dùng chính xác các giá trị như thế.

Kích thước của kiểu dữ liệu int trong C/C++ không được quy định trong tài liệu chuẩn, mà được để cho những người viết compiler tùy chọn. Trong chuẩn chỉ quy định như này:

sizeof(char) == 1
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

Tuy nhiên để hoạt động hiệu hiệu quả thì compiler điều viết cho phù hợp với kiến trúc của CPU.
ví dụ: CPU 16bit -> sizeof(int) = 16, …
Nhưng hiện tại do CPU 32bit khá phổ biến và các compiler đều định nghĩa kiểu int là 32 bit (4 bytes) nên mọi người cứ tưởng là kích thước của int mặc định là 4 bytes.

5 Likes

sai nhé. Không có chuyện đó đâu, chỉ là đơn giản vì bây giờ mọi máy tính đều kiến trúc 32b 64b nên nó size của nó mới đa phần là 4byte thôi.
Nguồn dẫn chứng chính xác nhất chính là “The C++ Standard”, Mục 3.9.1, nội dung thứ 2:
“There are fourfive signed integer types : “signed char”, “short int”, “int”, and “long int”., and “long long int”. In this list, each type provides at least as much storage as those preceding it in the list. Plain ints have the natural size suggested by the architecture of the execution environment44); the other signed integer types are provided to meet special needs”
Câu in đậm dịch đơn giản là “kích thước của int được đề nghị bởi kiến trúc của môi trường thực thi.”

2 Likes

Thêm nữa là cái biểu thức của @Pham_Van_Hai là chuẩn rồi đó

2 Likes

bạn gọi hàm srand() thì sẽ không bị trùng lặp nữa nhé.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?