2015-05-30 10 views
5
unsigned int value = 1860; 
int data = 1300; 
if((data - value) > 0) 
{ 
    printf("Why it is printing this"); 
} 

đầu ra: Tại sao nó được in nàySubtract nguyên Signed từ nguyên Unsigned

Tôi không hiểu tại sao trừ của hình thức ký unsigned đường chuyền thông qua "nếu" mặc dù giá trị của "dữ liệu" biến là ít hơn giá trị biến". Tôi thực sự tò mò làm thế nào ký và unsigned trừ 'một sai lầm nhỏ' nhưng dẫn đến một lớn bởi vì tôi đã sử dụng "Delay" chức năng thay vì "printf" và nhiệm vụ của tôi đã bị trì hoãn mà đã tạo ra sự hỗn loạn.

unsigned int value = 1860; 
int data = 1300; 
if((data - value) > 0) 
{ 
    Delay(data - value); 
} 

Phần này tiếp tục trì hoãn và nhiệm vụ của tôi không bao giờ kết thúc. Điều đó có nghĩa là giá trị của "dữ liệu - giá trị" là lý do tại sao nó chờ đợi vô hạn. Đồng thời nó đi qua "if" ở đâu, điều kiện là "data-value"> 0. Nghi ngờ của tôi nếu ký được chuyển đổi trong unsigned và đi qua "nếu", thì tại sao nó được đưa ra giá trị âm cho "Delay" chức năng.

+0

Giá trị của "giá trị dữ liệu" không phải là số âm, chỉ là giá trị ngược lại, nghĩa là quá lớn. Hãy thử điều này: 'printf ("% u ", data-value);' – skrtbhtngr

Trả lời

7

int loại dữ liệu theo mặc định signed trong C/C++ tức là hỗ trợ số âm. Khi một biểu thức chứa cả hai giá trị signedunsignedint, thì signed int sẽ tự động được chuyển đổi thành unsigned int và do đó kết quả sẽ không nhỏ hơn 0. Những gì bạn có thể muốn làm điều này là:

unsigned int value = 1860; 
int data = 1300; 
if((signed)(data - value) > 0) 
{ 
    printf("Why it is printing this"); 
} 

Nó dứt khoát chuyển đổi kết quả của biểu thức để một giá trị signed để nó có thể là một số âm.

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