Tôi đang thực hiện một máy tính trong một vi điều khiển được điều khiển qua cổng nối tiếp. Ví dụ, tôi sẽ gửi 1234*5678=
và nó sẽ trả lời 7006652\r\n
. Tôi đã viết mã cho điều này bằng trình biên dịch C18.
Khi tôi gửi 123456*789123=
, tôi nhận được trả lời 2932688576
, không chính xác. Câu trả lời đúng sẽ có 97421969088
, nhưng điều đó tràn ra unsigned long
.
Tôi không muốn tăng giới hạn tràn, nhưng muốn có cách kiểm tra xem có bị tràn không. Trong ASM, điều đó có thể thực hiện được bằng cách kiểm tra bit có liên quan trong thanh ghi STATUS, tuy nhiên, với C, bit này sẽ bị xóa trước khi tôi có thể đọc nó, phải không?
Cách tốt nhất sẽ là một giải pháp chung để xem có xảy ra tràn không.