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;
}
@ 왜 당신은'pos % 2'보다는'pos & 1'을 쓰길 원하십니까? 난처? –
참고 : 원래 코드는 컴파일되지 않습니다 ('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"; "은 들여 쓰이지 않습니다. –
이것은 문제를 [testcase] (http://sscce.org)로 줄이지 않을 때 발생합니다. 'pos & 1'의 값을 쉽게 확인할 수는 있지만 주변 코드의'=='및 _all_을 사용하여이 문제를 난독 화했습니다. 나중에 디버깅 방법에 testcase_를 포함 시키면 도움을 요청할 필요가 없기를 바랍니다. :-) ** 나누고 정복하십시오, 내 친구 ** –