2013-10-28 3 views
0

코딩 중이며 다음 코드는 원하는 출력을 제공하지 않습니다. pos & 1은 pos가 2로 나뉠 때 나머지를 반환합니다. pos & 1을 pos % 2로 바꿀 때 모든 것이 잘됩니다. 무엇이 문제 일 수 있습니까?비트의 흥미로운 동작 AND

#include <iostream> 
using namespace std; 
int main(){ 
    int y; 
    unsigned long long int pos; 
    cin>>y; 
    cin>>pos; 
    int f=0; 
    while(y>0){ 
     y--; 
     if(pos&1==0){ 
      f=1-f; 
     } 
     pos=pos/2; 
    } 
    if(f==1){ 
     cout<<"blue\n"; 
    } 
    else 
    cout<<"red\n"; 
    return 0; 
} 
+2

@ 왜 당신은'pos % 2'보다는'pos & 1'을 쓰길 원하십니까? 난처? –

+0

참고 : 원래 코드는 컴파일되지 않습니다 ('cin' 및'cout'은 선언되지 않았습니다). 누락 된'#include '과 using 지시어 (또는 using 선언문)를 추가하고'g ++ -Wall'을 사용하여 컴파일하면'경고 :'& '[-Wraphesisheses]'피연산자의 비교 괄호를 제안합니다. 'pos & 1 == 0'은'pos & (1 == 0)'을 의미합니다 ('(pos & 1) == 0'을 원할 때). _ 항상 경고와 함께 컴파일 _합니다. ('-Wext'와'-Wextra -Wconversion'을,'-std = C++ 98' /'-std = C++ 11'로'-pedantic-errors'를 제안합니다.) 또한 여러분의' << "빨간색 \ n"; "은 들여 쓰이지 않습니다. –

+1

이것은 문제를 [testcase] (http://sscce.org)로 줄이지 않을 때 발생합니다. 'pos & 1'의 값을 쉽게 확인할 수는 있지만 주변 코드의'=='및 _all_을 사용하여이 문제를 난독 화했습니다. 나중에 디버깅 방법에 testcase_를 포함 시키면 도움을 요청할 필요가 없기를 바랍니다. :-) ** 나누고 정복하십시오, 내 친구 ** –

답변

11

1==0pos&1보다 우선합니다. 시도하십시오 if((pos&1)==0){