2014-10-28 11 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

Почему вы не просто использовать первую функцию? Он работает и короче. –

+0

Какова ценность CHAR_BIT?. если PrnCharBit ('#'); то что такое двоичное значение? –

+3

Поскольку это помечено C++, 'std :: cout << std :: bitset (c);' – user657267

ответ

15

Оператор precedence. Оператор равенства (==) упорядочен до побитовой операции (&).

Clang предупреждает следующее:

& имеет более низкий приоритет, чем ==; == будет оцениваться первым

В вашем втором изменении функции if(mask&c==0) к if((mask&c)==0)

+0

thx! ошибка исправлена! (Это так странно, что & IS ниже, чем ==) – Roy

Смежные вопросы