2014-02-05 16 views
0

我只是試圖打印unsigned int作爲位,但它出現在我的代碼:按位操作,位的打印取決於哪個putchar首先被放置...?

void checksWithOne(unsigned int userInput) 
{ 
    int i = 0, a = 0; 

    for (i = sizeof(int)*8-1; i >= 0; i--) 
    { 
     a = (userInput&(1<<i)); 
     if (a==1) 
     { 
     putchar('1'); 
     } 
     else 
     { 
     putchar('0'); 
     } 
    } 
    printf("\n"); 
} 

只有當if語句改變這種工作(更換1和0):

 if (a==0) 
     { 
     putchar('0'); 
     } 
     else 
     { 
     putchar('1'); 
     } 

爲什麼這是...超出了我的想法?

由於

+2

瞭解'問題打印值'在第一個代碼循環中你會明白。 –

回答

1

第二個代碼因爲您打印'0'而起作用a爲== 0其他'1'。因此,在第一個代碼段中,if(a==1)應該是if(a),這意味着如果a不是0(請注意C中的每個非零值都爲true),則打印1

的事情是a = (userInput & (1<<i));並不總是1a可以是一個數字是零或數量,其中只有一個位是1(如... 00010000)

1

a = (userInput&(1<<i))結果將是要麼1<<i0,(未10)。所以改變:

if (a==1) 

到:

if (a != 0) 

和你的代碼應該工作。