2010-05-02 121 views
6

我已經在無符號變量中分配了補碼值。爲什麼這個C程序輸出一個負數?

那麼爲什麼這個C程序輸出一個負數呢?

#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

您的問題應該是:「編譯此代碼時,爲什麼編譯器不會發出警告?」。答案是:「打開編譯器的警告(例如-Wall)」 – 2010-05-02 09:59:30

回答

14

%d格式說明指示printf治療參數作爲有符號整數。改爲使用%u

4

這是因爲%d是帶符號的int格式佔位符,所以它正在轉換。將%u用於未簽名。