30/09/2018, 18:09

Printf( "%d %d %d ", 32767,32767+1,32767+2); In ra là 32767 -32768 -32767 ( WHY?)

ví dụ printf( "%d %d %d ", 32767,32767+1,32767+2);
In ra là
32767 -32768 -32767 ( WHY?)
Kiểu enum, short int, int: Lưu các số nguyên từ -32768 đến 32767. Sử dụng bit bên trái nhất để làm bit dấu. => Nếu gán giá trị >32767 cho biến có 1 trong 3 kiểu trên thì giá trị của biến này có thể là số âm.( Why ? )

Minh Hoàng viết 20:10 ngày 30/09/2018

gọi là lỗi overflow. số 32767 ở dạng nhị phân là 011111…111 (15 số 1), khi cộng 1 sẽ được 100000…000 (15 số 0). Vì số 32767+1 có bit ngoài cùng bên trái là 1 nên nó là số âm, biểu diễn theo bù 2 sẽ được -32768 (xem thêm số bù 2 để hiểu rõ). 32767+2 cũng tương tự.

Bài liên quan
0