2014-10-28 188 views
3

char個月前寫了一個函數來打印的二進制格式的二進制格式,它是這樣的,效果不錯:打印字符

void PrnCharBit(char x) 
{ 
     int i,mask; 
     for(i=CHAR_BIT;i>=1;i--) 
     { 
      mask=(1<<(i-1))&x; 
      putchar((mask==0)?'0':'1'); 
     } 
     putchar('\n'); 
} 

今天我想利用這個功能,所以我寫了一個幾乎與上面的函數相同:

void PrnCharBit(char c) 
{ 
    int i; 
    char mask=0; 
    //printf("%d\n",CHAR_MAX); 
    for(i=sizeof(char)*CHAR_BIT-1;i>=0;i--) 
    { 
     mask=1<<i; 
     if(mask&c==0) putchar('0'); 
     else putchar('1'); 
    } 
    putchar('\n'); 
} 

但是,第二個函數不起作用。我不明白爲什麼,因爲這兩個功能幾乎是一樣的!爲什麼第二個函數不會產生相同的結果?

+1

你爲什麼不只是使用第一個函數?它工作並且更短。 – 2014-10-28 08:43:56

+0

CHAR_BIT的值是什麼?如果PrnCharBit('#');那麼二進制值應該是什麼? – 2014-10-28 08:47:36

+3

由於這是標記爲C++,'std :: cout << std :: bitset (c);' – user657267 2014-10-28 08:48:36

回答

15

運營商precedence。在按位操作(&)之前,等於操作符(==)被排序。

Clang警告如下;

&的優先級低於==; ==將首先

評估在你的第二個職能轉變if(mask&c==0)if((mask&c)==0)

+0

thx!該錯誤是固定的!(奇怪的是&IS低於==) – Roy 2014-10-28 09:49:26