2014-02-05 6 views
0

Я просто пытаюсь напечатать неподписанных 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"); 
} 

работает только если если заявление изменен как таковой (заменяющих 1s и 0s):

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

Это вне меня, почему это ... какие-то мысли?

Благодаря

+2

понимать значения проблемы печати для ' 'в цикле первого кода вы поймете. –

ответ

1

Второй код работает, потому что вы печатаете '0', когда a is == 0 еще '1'. Соответственно, в первой части кода if(a==1) должен быть if(a), что означает печать 1, если a не является 0 (Rremember каждое ненулевое значение истинно на C).

Дело в том, a = (userInput & (1<<i)); не всегда 1 но a может быть число, которое либо ноль, либо число, в котором только один бит один (например, ... 00010000)

1

Результат a = (userInput&(1<<i)) будет либо 1<<i или 0 (не 1 или 0). Меняем:

if (a==1) 

к:

if (a != 0) 

и ваш код должен работать.

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

  • Нет связанных вопросов^_^