programing

C의 >>>= 연산자는 무엇입니까?

newsource 2022. 8. 3. 23:17

C의 >>>= 연산자는 무엇입니까?

동료에게 퍼즐로 주어졌을 때, 이 C프로그램이 실제로 어떻게 컴파일 되어 실행되는지 알 수 없습니다. 뭐야...>>>=한 '오퍼레이터'1P1 .쨍그랑 GCC 서cc는 。"--?"

#include <stdio.h>

int main()
{
    int a[2]={ 10, 1 };

    while( a[ 0xFULL?'\0':-1:>>>=a<:!!0X.1P1 ] )
        printf("?");

    return 0;
}

행:

while( a[ 0xFULL?'\0':-1:>>>=a<:!!0X.1P1 ] )

디그래프 포함 :> ★★★★★★★★★★★★★★★★★」<: ,로 변환됩니다.] ★★★★★★★★★★★★★★★★★」[ 즉: ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ ㄴ.

while( a[ 0xFULL?'\0':-1 ] >>= a[ !!0X.1P1 ] )

그대로의 「」0xFULL is is is is is와 0xF는 (16진수)를 뜻합니다.15ULL그냥 문자 그대로라고 명시할 뿐입니다.어떤 경우든, 부울로 따지면 그건 사실이니까0xFULL ? '\0' : -1'\0'숫자 값이 단순한 문자 리터럴입니다.0.

한 meanwhile.0X.1P1는 2/16 = 0.125와 같은 16진수 부동소수점 리터럴입니다.어떤 경우에도 0이 아니므로 부울값으로도 해당되므로 두 번 부정합니다.!! 낳다1따라서 전체는 다음과 같이 단순해집니다.

while( a[0] >>= a[1] )

「」>>=는 오른쪽 피연산자가 부여한 비트수만큼 왼쪽 피연산자를 오른쪽 비트수로 변환하여 결과를 반환하는 복합 할당입니다.이 경우 올바른 오퍼랜드가a[1] 1아, 아, 아, 아 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 맞다

while( a[0] >>= 1 )

또는 동등하게:

while( a[0] /= 2 )

「」의 .a[0]10입니다. 1회만 이동하면 5, (반올림) 2, 1, 마지막으로 0이 되고 여기서 루프가 끝납니다.3번으로 나누다

그것은 이중 글자와 관련된 다소 불명확한 코드이다, 즉,<: ★★★★★★★★★★★★★★★★★」:>하다, 대신하다, 하다, 대신하다, 대신하다, 대신하다.[ ★★★★★★★★★★★★★★★★★」]각각 다음과 같다.조건부 연산자의 사용도 있습니다.오른쪽 시프트 할당인 비트 시프트 연산자도 있습니다.>>=.

이것은 읽기 쉬운 버전입니다.

while( a[ 0xFULL ? '\0' : -1 ] >>= a[ !!0X.1P1 ] )

읽기 , 라는[]뭇매를 맞다

while( a[0] >>= a[1] )

<고객명>의 치환a[0] ★★★★★★★★★★★★★★★★★」a[1] 있는지 파악할 수 . 즉, 즉, 루프가 무엇을 하고 있는지 알 수 있습니다.

int i = 10;
while( i >>= 1)

은 단순히 2로 은 2로, 2로 나눗셈은 2로 나눕니다.5, 2, 1.

왼쪽에서 오른쪽으로 표현해 보겠습니다.

a[ 0xFULL?'\0':-1:>>>=a<:!!0X.1P1 ]

입니다.?하위 표현식은 다음과 같습니다.

0xFULL ? '\0' : -1

'에'라는 뜻입니다.0xFULL 0을 반환한다.'\0',그렇지않으면-1.0xFULL는 부호 없는 긴 서픽스를 가진 16진수 리터럴입니다.즉, 16진수 리터럴 타입입니다.unsigned long long근데 그건 별로 중요하지 않아요. 왜냐하면0xF을 사용하다

또, 삼원 연산자는, 제2항과 제3항의 타입을 공통 타입으로 변환한다. '\0'다음으로 로 변환됩니다.int '그냥'입니다)0.

「」의 값0xF이 되다, 이 표현은 다음과 을 사용하다

a[ 0 :>>>=a<:!!0X.1P1 ]

다음, 지만요.:>디그래프입니다.확장되는 구조입니다.]:

a[0 ]>>=a<:!!0X.1P1 ]

>>=는 부호 이며, 이를 「우측 시프트」의 「 시프트」의 "우측 시프트"는 "우측 시프트"입니다.a더 명확하게 하기 위해서요.

하다.<:에 확장되는 디그래프입니다.[:

a[0] >>= a[!!0X.1P1 ]

0X.1P1열여섯 살그 , 지만 but but but but but but but but but but but but but but but but but but but!!0으로 하다 0X.1P10.1250이 .

a[0] >>= a[true]
-> a[0] >>= a[1]

>>=이치노비트를 조작자 오른쪽에 있는 값만큼 앞으로 이동시켜 왼쪽 피연산자 값을 변경합니다. 10에서는 「」입니다.1010음음음음 뭇매하다

01010 >> 1 == 00101
00101 >> 1 == 00010
00010 >> 1 == 00001
00001 >> 1 == 00000

>>=, 한 이동하면작동 결과를 반환합니다 변속 등 그것에 운영 결과를 반환합니다.a[0]그비트는 1이동하는 매 시간에 대한 영이 아닌 유해가 이 루프가 계속될 것이다.비트가 1개씩 오른쪽으로루프는 계속됩니다 때마다 이동할.어디네번째 시도는 네번째 시도는.a[0]된다가 되0그래서 루프에 떠오르지 않다.루프는 입력되지 않습니다.

결과적으로, 결과적으로.?3인쇄한 횟수입니다.세 번 인쇄됩니다.

언급URL : https://stackoverflow.com/questions/25495042/what-is-the-operator-in-c