01/10/2018, 08:19
Tại sao kiểu dữ liệu int là 2 byte nhưng vẫn biểu diễn được giá trị pow(2,40)
dạ như tiêu đề ạ.
em thắng mắc là kiểu int trong C/Cpp chỉ có 2byte.
nhưng khi em thực hiện
int n;
n=pow(2,40);
cout<<n;
thì vẫn biểu diễn ra giá trị của n
Bài liên quan
Ngày xưa là 2byte giờ int là 4 byte bằng long rồi :v
4 byte cũng không đủ để lưu kết quả của phép tính này, cần ít nhất 5 byte đối với kiểu unsigned và 5 byte + 1 bit đối với kiểu signed, do đó khi biên dịch có thể trình dịch đã tự infer sử dụng kiểu int64 tức dùng 8 byte để lưu kết quả
^ Nếu nó tính sẵn mà int 4 byte thì cũng phải gọt lại thôi.
Tính lại xem nó có ra đúng không nếu đúng là int lên 8 byte rồi.
Thực ra
sizeof(int)
là kích thước của 1 word trên nền tảng đó, còn long short long long gì đấy đều rất vô chừng. Nếu muốn đúng (để xài bitmask chẳng hạn) thì tìm int32_t.À quên hỏi bạn dùng ide gì và HĐH gì. Nếu nhớ ko nhầm thì nếu bạn dùng visual trên win 64bit thì int sẽ là 8 byte. Ide khác mình ko rõ lắm.
Thớt chắc dùng sách cũ lắm lắm rồi mới có int 2 byte, giờ chỉ cần hỏi thớt 1 câu
sizeof(int)
bằng mấy thôi.thế ạ. lâu nay e cứ tưởng int là 2 byte chứ.
em dùng win 7x64 bit. ide là codeblock ạ.
sizeof(int)=4
à. rồi e test thử lại thì do lúc nãy e test mỗi 2^40
2^40=2^31 tức là nó tự gán bằng max luôn.
Tks các bác ạ
nó không tự chuyển sang 8byte đâu nha bạn, nó chỉ sử dụng cơ chế tràn số của C/C++, loại bỏ các bit nằm ngoài vùng lưu trữ.
ko xác định luôn chứ ko sử dụng cơ chế tràn số nữa
thử trên
2147483647
là INT_MAX-1294967296
là cơ chế tràn số