programing

C에서의 & & 운영이란?

prostudy 2022. 7. 5. 22:13
반응형

C에서의 & & 운영이란?

#include <stdio.h>

volatile int i;

int main()
{
    int c;

    for (i = 0; i < 3; i++) 
    {
         c = i &&& i;
         printf("%d\n", c);
    }

    return 0;
}

위 프로그램의 출력은 다음을 사용하여 컴파일되었습니다.gcc

0
1
1

를 사용하여-Wall또는-Waddress선택,gcc는 다음 경고를 발행합니다.

warning: the address of ‘i’ will always evaluate as ‘true’ [-Waddress]

어떻게 있다.c위 프로그램에서 평가되고 있습니까?

그건…c = i && (&i);두 번째 부분은 용장성이기 때문에&i결코 평가하지 않는다false.

사용자 정의 유형의 경우, 실제로 단일 데이터를 오버로드할 수 있습니다.operator &그건 다를지 몰라도 여전히 아주 나쁜 생각이야.

경고를 켜면 다음과 같은 메시지가 나타납니다.

경고: 'i'의 주소는 항상 'true'로 평가됩니다.

거기에는 없다&&&C의 연산자 또는 토큰.근데...&&(논리적인 "and") 및&(단일 주소 또는 비트 단위 "and") 연산자가 존재합니다.

최대 뭉크의 법칙에 의해, 이것은 다음과 같습니다.

c = i &&& i;

다음과 같습니다.

c = i && & i;

굳어지다c둘 다일 경우 1로i그리고.&itrue, 둘 중 하나가 false일 경우 0이 됩니다.

int의 경우 0이 아닌 값은 모두 true입니다.포인터의 경우 null이 아닌 값은 모두 true입니다(또한 객체의 주소는 항상 null이 아닙니다).그래서:

굳어지다c1에 대해서i0이 아닌, 또는0한다면i0과 같습니다.

즉, 그 말은&&&단지 고의적인 난독화를 위해 사용되고 있습니다.할당은 다음 중 하나일 수 있습니다.

c = i && 1;
c = !!i;
c = (bool)i;          // C++ or C with <stdbool.h>
c = i ? 1 : 0;        /* C */
c = i ? true : false; // C++

언급URL : https://stackoverflow.com/questions/13946938/what-is-operation-in-c

반응형