2010-12-26 2 views
1

는 이러한 연산자의 기능 (= & ~) 무엇이 C 연산자를 설명 할 수,이 코드는 농담으로 게시 이 하나가

라는 제목의 발견 "초기 유닉스 소스에서 발견 :"

if(rp->p_flag & SSWAP) { 
    rp->p_flag =& ~SSWAP; 
    aretu(u.u_ssav); 
} 

편집 : 출처 : http://www.bsdlover.cn/study/UnixTree/V6/usr/sys/ken/slp.c.html

+0

그건 약간의 플리퍼 야. 농담이 뭐야? –

+0

여기에서 참조하십시오 http://www.bsdlover.cn/study/UnixTree/V6/usr/sys/ken/slp.c.html 코멘트를 삭제했습니다 –

답변

5

~unary bitwise complement 인 FLI ps 비트 정수.

그러나 의견을 읽고 잘못된 코드를 읽은 후 실현 한 코드는 컴파일러로 컴파일되지 않습니다.

@Avi 덕분에 =& 연산자는 현재 &=을 의미하지만이 구문은 실제로 현재의 C 표준보다 훨씬 앞서서 진정한 고대 UNIX 코드입니다.

정말 오늘을

address-of 운영자 역할을한다 여기

&, 아닌 bitwise AND 연산자를 의미 할 것입니다 무엇입니까.

int main() 
{ 
    int x = 5; 
    int y = 2; 
    x =& ~y; 
} 

이 코드는 생성 할 것이다 컴파일 :

error: lvalue required as unary ‘&’ operand

난 정말 전사에 문제가 생각, 논리적으로, 그것은 &= 아닌 다른 방법으로해야한다.

실제로는 &= 인 경우에는 bitwise를하고 있습니다.

+2

하지만 예제는'= &'not'& = ' –

+0

편집을 위해 두려워한 사람들 – birryree

+2

초기 C에서 할당 연산자의 오른쪽에 연산자가있었습니다. 그래서'= &'대신에'= &','+ ='대신에'= +'입니다. – Avi

1

=&은 실제로 두 개의 분리 연산자 인 =&이므로 줄은 rp->p_flag = & ~SSWAP;과 같습니다.

bitwise NOT 연산자이므로 ~SSWAPSSWAP 비트를 뒤집은 결과입니다. & ~SSWAP은 컴파일 오류 인 ~SSWAP의 결과를 참조하게됩니다. 따라서 현대 컴파일러 (C89 이후)를 사용하여 컴파일되지 않지만 =&은 현대 컴파일러에서 &=과 동일합니다.

&=rp->p_flag~SSWAPbitwise AND을 적용하고 rp->p_flag에 결과를 저장합니다. 결과적으로 모든 0 비트가 SSWAP이면 rp->p_flag의 각 비트가 꺼져 있습니다. 이 작업은 적어도 하나의 1 비트가 꺼지면 실행되어 rp->p_flag 값이 작동의 결과로 변경되면 aretu(u.u_ssav) 만 호출 할 수 있습니다.

+0

Ehrm, 실제로'&'가'= '바로 뒤에 올 때, 이것은 단항 연산자로 사용되므로 연산자의 주소가 * 비 * 비트가됩니다. 물론 임시 주소를 사용하는 것은 전혀 의미가 없으므로 오타가있는 것이 분명하고 '& ='(하나의 연산자)가 의미됩니다. – sepp2k

+0

@ sepp2k 귀하의 의견을 읽기 전에 그것은 나를 때렸습니다. 네가 괜찮 으면, 나는 이것을 내 대답에 포함시킬 것이다. – marcog

+0

C89 이후 연산자 = &는 더 이상 존재하지 않습니다. & 연산자 만 유효합니다. 이전의 C 컴파일러에서는 이것이 실제로 유효했기 때문에 이것은 초기 UNIX 소스 코드에서 나온 것입니다. –

4

초기 C에서 할당 연산자의 오른쪽에 연산자가있었습니다.따라서 &= 대신 =&이고 += 대신 =+이되었습니다.

그래서이 코드는 특정 비트가 설정되어 있는지 확인하고, 그렇다면 조치를 취하여 비트를 끕니다.

1

:

B는 X와 Y를 추가 = X + Y를 사용하여, 할당을 일반화 연산자를 도입했다. 표기법은 Algol 68 [Wijngaarden 75]에서 의 TMG에 통합 된 McIlroy를 통해 이루어졌습니다. (B 초기 C에서, 연산자 는 = + 대신 + =의 철자가되었다. 1976 년 수리이 실수, B의 어휘 분석기에서 제 폼 처리를 다루고, 간편한 방법으로 을 유도)

관련 문제