01/10/2018, 10:51

Int với int8_t trong các phép toán

int8_t timenow; (1)
int timenow; (2)

	cout << "What time is it ?" << endl;
	cout << "It is : ";
	cin >> timenow;
	cout << "There are " << 24 - timenow << " hours has passed in your day" << endl;

Mấy anh chị cho em hỏi: Khi em khai báo kiểu (1) thì kết quả “24 - timenow” sai. Nhưng khi khai kiểu (2) thì kết quả ra đúng. Thế có gì khác giữa int với int8_t trong phép toán thế ? Cảm ơn!!!

Văn Dương viết 13:07 ngày 01/10/2018

Int8 : số nguyên 8 bit.
Int : Số nguyên có số bit phụ thuộc hệ điều hành, compiler.

Lê Khánh viết 13:05 ngày 01/10/2018

Em biết cái đó nhưng mà sao khi cộng trừ nhân chia 2 cái nó ra kết quả khác nhau ấy anh ?

Văn Dương viết 12:52 ngày 01/10/2018

Bởi vì int8 là 8 bit giá trị từ -128 đến 127.
Nếu em nhập 1 số có số bit lớn hơn, thì nó sẽ cắt một số bit khác vứt đi chỉ lấy lại các bit thấp nhất.
Cái này người ta gọi là tràn số. Khi đó giá trị của biến int8 sẽ khác với cái giá trị nhập vào vì nó đã bị cắt mất 1 số bit.

Một cái nữa nếu cùng số bit nhưng một cái có dấu, một cái không thì biến được gán cũng có thể sẽ bị thay đổi giá trị.

Bài liên quan
0