가장 인기있는 언어 (아래 참고 참조)에서 비교 연산자 (==,! =, <,>, <=,> =)가 비트 연산자 (&, |, ^ ~)?
나는이 우선 순위가 자연 스러울 수있는 곳에서 사용 된 적이 없다고 생각합니다. 항상 다음과 같습니다.
if( (x & MASK) == CORRECT ) ... // Chosen bits are in correct setting, rest unimportant
if( (x ^ x_prev) == SET ) // only, and exactly SET bit changed
if( (x & REQUIRED) < REQUIRED ) // Not all conditions satisfied
내가 사용하는 경우 :
flags = ( x == 6 | 2 ); // set bit 0 when x is 6, bit 1 always.
존재하지 않는 것에 가깝습니다.
언어 설계자들이 그러한 우선 순위를 결정하는 동기는 무엇입니까?
예를 들어, 상위 12 개 언어에서 SQL을 제외한 모든 언어는 langpop.com의 프로그래밍 언어 인기 목록 (C, Java, C ++, PHP, JavaScript, Python, C #, Perl, SQL, Ruby, Shell, Visual Basic)과 같습니다.
[arithmetics] [logic operator] [arithmetics]
입니다. 대부분의 프로그래머는 괄호를 엉망으로 만들지 않습니다. if(((x+getLowX()) < getMinX) || ((x-getHighX())>getMaxX())))
대부분은 논리보다 산술의 if( ( x + getLowX() < getMinX ) || ( x - getHighX() > getMaxX() ))
우선 순위를 가정하고 +
위의 우선 순위를 가정 <
합니다. 이제 if( x ^ getMask() != PATTERN )
XOR은 산술 연산자 인 것처럼 직관적으로 동일하게 동작해야합니다. 그것이 if( x ^ ( getMask() != PATTERN ) )
완전히 반 직관적 인 것으로 해석된다는 사실 .