2010-05-02 45 views
6

Tôi đã gán giá trị bổ sung trong biến chưa ký.Tại sao chương trình C này xuất ra một số âm?

Sau đó, tại sao chương trình C này xuất ra một số âm?

#include<stdio.h> 
#include<conio.h> 

int main() 
{ 
    unsigned int Value = 4;   /* 4 = 0000 0000 0000 0100 */ 
    unsigned int result = 0; 

    result = ~ Value;    /* -5 = 1111 1111 1111 1011 */ 

    printf("result = %d", result); /* -5    */ 

    getch(); 

    return 0; 
} 
+0

Câu hỏi của bạn nên là: "Tại sao trình biên dịch không phát ra cảnh báo khi tôi biên dịch mã này?". Câu trả lời là: "Bật các cảnh báo trên trình biên dịch. (Ví dụ: -Wall)" –

Trả lời

14

Mã định dạng %d chỉ định printf để xử lý đối số dưới dạng số nguyên đã ký. Sử dụng %u để thay thế.

4

Đó là vì% d là trình giữ chỗ có định dạng int đã ký, do đó nó được chuyển đổi. Sử dụng% u cho unsigned.

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