OR, AND 연산에서 앞에서 순서대로 연산된다는 보장이 있나요?

superkkt의 이미지

set_status(get_status() | ~STAT_PASV | ~STAT_DTP);

이런 코드를 사용합니다. 현재 상태에서 STAT_PASV, STAT_DTP 비트를 끄는것인데요.. 별 문제는 없는데 가만히 생각해보니 OR 연산이 앞에서부터 순서대로 되지 않는다면 잘못된 결과가 나올 가능성이 있을것 같네요.

만약 앞에서부터 순서대로 된다는 보장이 없다면 아래와 같이 코드를 바꾸는게 좋을것 같은데요..

set_status(get_status() | (~STAT_PASV & ~STAT_DTP));

if문에서는 조건이 앞에서부터 실행된다고 알고있는데 이 경우에도 마찬가지로 적용되는지 궁금합니다.

superkkt의 이미지

에고.. 제가 잠깐 햇갈렸습니다. 비트를 끄는건 아래와 같이해서 연산 순서에 상관이 없군요..

set_status(get_status() & ~STAT_PASV & ~STAT_DTP);

그래도 연산순서가 앞에서부터 되는지 여부는 궁금하네요~ :twisted:

======================
BLOG : http://superkkt.com

cinsk의 이미지

C, C++ 언어에서, 피연산자가 하나인 unary operator나, 대입 연산자(=, =+, =<<등), 그리고 조건부 연산자(?:)를 제외한 나머지는 왼쪽에서 오른쪽으로 결합합니다. 따라서 쓴 순서대로 앞에서부터 실행됩니다.