2012-07-15 40 views
7

Khi một số nguyên nằm ngoài phạm vi của loại, giá trị tối đa + 1 được cộng/trừ (phụ thuộc vào phần nào của phạm vi số). Ví dụ:Tại sao các chuyển đổi ngầm định hoạt động giống như vậy?

unsigned short num = 65537; 

num sẽ có giá trị 1 (65536 được trừ). Câu hỏi của tôi là: tại sao nó lại xảy ra? Trực giác của tôi cho tôi biết nó có liên quan đến cờ mang và cờ tràn, vì giá trị tối đa luôn là 1111 ....

Cảm ơn bạn trước!

+4

Nó cắt ngắn ... – Mehrdad

+0

Ví dụ hoàn hảo về lý do bạn nên biên dịch về cơ bản tất cả các cảnh báo có thể được bật. Về lý do tại sao đó là trong tiêu chuẩn mặc dù .... Không có ý tưởng: p. (Trừ khi bạn có nghĩa là cụ thể 1. Đó chỉ là một lời khen ngợi của 2.) – Corbin

+0

Ví dụ về thông điệp cảnh báo như vậy: 'warning: số nguyên lớn bị cắt ngắn hoàn toàn thành unsigned type' – curiousguy

Trả lời

7

Đối với một máy tính mà sử dụng two's-bổ sung cho số nguyên ký các quy tắc cho chuyển đổi sang một N -bit unsigned loại tương đương với loại bỏ tất cả nhưng bậc thấp N bit. đối với phần cứng thông thường, đây là cách dễ nhất để thực hiện chuyển đổi.

Chuẩn này cho phép các đại diện khác cho các số nguyên đã ký, nhưng sử dụng cùng một quy tắc chuyển đổi để đảm bảo tính nhất quán. Điều này có thể yêu cầu một số công việc phụ trên các máy như vậy, nhưng (a) các máy như vậy là khá hiếm, và (b) chi phí nên được khá nhỏ anyway.

Các vấn đề liên quan