나는 정적 분석 도구를 통해 다음 코드를 공급 한 :C의 괄호는 비트 연산의 피연산자 결과 유형을 변경할 수 있습니까?
u1 = (u1^u2); // OK
u1 = (u1^u2) & u3; // NOT OK
u1 = (u1^u2) & 10; // NOT OK
u1 = (u1^u2) & 10U; // NOT OK
u1 = (unsigned char)(u1^u2) & 10U; // OK
u1 = (unsigned char)(u1^u2) & u3; // OK
는 "OK"정적 분석 도구는 불평하지 않았 음을 의미합니다. "NOT OK"는 정적 분석 도구가 비트 연산의 일부 피연산자가 부호없는 정수가 아니라고 불평했다는 의미입니다. 마지막 두 라인에서
결과 괄호 원인 중
것을 보여준다. 실제의 형식 변환으로 부호 첨부
b. 정적 분석 도구가 타입 변환으로 생각한다고 생각하는 것
(b)에 대해서는 정적 분석 도구 개발자에게 문의 할 것입니다.
하지만 내가하기 전에 아마도 C 언어가 (a)로 알려져 있는지 알고 싶습니다.
감사합니다. @pmg! 질문 제목에 "괄호"라는 단어를 남기겠습니다. 왜냐하면 이제는 관련성이 없다는 것을 알았지 만 다른 사람들도 문제의 원인이 무엇인지 생각하고 검색하여이 대답을 찾을 수 있기 때문입니다. 이제이 좋은 대답은 "C 정수 승격 규칙을 배우는"특별한 경우라는 것을 이해합니다. 많은 참고 문헌이 있습니다 (이제 내가 뭘 찾아야할지 알았습니다). 예 : http://tinyurl.com/62fm8yl on stackoverflow 및 href = "http://www.lysator.liu.se/c/rat/c2.html#3-2"- "서명되지 않은 보존 및 값"에 대한 설명 보존 ". – talkaboutquality