저는 두 개의 정수로 구성된 개별 비트로 작업합니다 (우분투 컴퓨터에서 컴파일하려면 g ++를 사용합니다).C++ 비트 연산
몇 가지 중간 단계에서, 나는
q = 11000000000000000000000000000000
q_1 = 00000000000000000000000000000001
지금은 Q 단위의 장소 여부를 확인하려는 등의 비트 표현을 가지고 동일하거나 둘은 q_1 있습니다. 그래서 if 조건에서 (*q)&1==q_1
을 확인하고 잘 작동합니다.
하지만 q의 장소가 0이고 q_1의 위치가 1인지 확인하고 싶을 때 나는 ((*q)&1==0) && (q_1==1)
을 수행해야한다고 생각했지만 예상대로 작동하지 않습니다. 디버깅을 위해 및 (q_1==1)
의 값을 개별적으로 편집하고 1
으로 인쇄되었습니다. 그러나 ((*q)&1==0) && (q_1==1)
의 값은 0으로 인쇄됩니다. 이유가 무엇입니까?
* EDIT * 기능으로는, Q는 참조로 전달하고, 그래서이 값을 얻기 위해 * Q를 사용하고 .. C 및 C에서
? * reference *로 전달 된 경우,'*'를 사용하지 않을 것입니다. – hyde
이것은 최소한의 연구가 원인을 알려주는 고전적인 버그입니다. bitwise & == 연산자 우선 순위가 낮습니다. 일반적으로 연산자 우선 순위 규칙을 모두 잘 모르는 경우 괄호를 사용하십시오. – Lundin
죄송 합니다만, 우선'(* q)'주위에 많은 괄호를 사용했습니다. 왜냐하면 우선 순위를 모르기 때문에 '&'의 피연산자가 모두 '1'이기 때문에 혼란스러워하고 여전히 출력으로 '0'을 얻었습니다 ... –