Nếu tôi thực hiện đoạn mã sau trong C:C integer overflow hành vi khi giao đến số nguyên chiều rộng lớn hơn
#include <stdint.h>
uint16_t a = 4000;
uint16_t b = 8000;
int32_t c = a - b;
printf("%d", c);
It in một cách chính xác '-4000' như kết quả. Tuy nhiên, tôi là một chút bối rối: không nên có một tràn số học khi trừ một số nguyên lớn hơn unsigned từ khác? Những quy tắc đúc nào được chơi ở đây? Câu hỏi này có vẻ hơi noobish, vì vậy bất kỳ tài liệu tham khảo sẽ được đánh giá rất nhiều.
Tham chiếu của tôi đương nhiên là tiêu chuẩn cũ. Xem phản ứng của tgamblin cho C99. Mặc dù họ nói cùng một điều. – TrayMan
3.2.1.5 là cho các chuyển đổi kép/float/int/etc. Anh ấy đang tìm kiếm các chương trình khuyến mãi không thể thiếu (dài/int/char/ngắn/etc) trong phiên bản 3.2.1.1 của tiêu chuẩn đó. Đó là trong 6.3.1.1 trong tiêu chuẩn mới hơn mà tôi đã liên kết ở trên. – tgamblin
Ông cũng có thể muốn 3.2.1.2 quá (ints ký/unsigned) – tgamblin