Tôi đã tò mò muốn biết điều gì sẽ xảy ra nếu tôi gán một giá trị âm cho một biến chưa ký.Điều gì sẽ xảy ra nếu tôi gán một giá trị âm cho biến chưa ký?
Mã sẽ trông hơi giống thế này.
unsigned int nVal = 0;
nVal = -5;
Nó không cho tôi bất kỳ lỗi trình biên dịch nào. Khi tôi chạy chương trình, nVal
được gán một giá trị kỳ lạ! Có thể nào là giá trị bổ sung của một số 2 được gán cho nVal
?
linh cảm của tôi (đã không thể đến tìm thấy nó trong tiêu chuẩn được nêu ra) là hành vi là kỹ thuật không xác định. Hơn nữa, tôi nghi ngờ rằng bạn sẽ thấy những gì bạn mong đợi trên khá nhiều bất kỳ trình biên dịch bạn có thể tìm thấy. Vì vậy, trong khi bạn thường sẽ thấy hành vi đó, nó có lẽ không phải là một ý tưởng tốt để dựa vào nó. – sblom
Nó không phải là không xác định (xem * §4.7/2 *), nhưng đại diện (ví dụ như bổ sung 2s) không được bắt buộc theo tiêu chuẩn. –
@gf (et al bên dưới), tuyệt. Có vẻ như hành vi này, trên thực tế, được định nghĩa rõ ràng là những gì bạn mong đợi, @viswanathan. – sblom