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진수)를 뜻합니다.15
ULL
그냥 문자 그대로라고 명시할 뿐입니다.어떤 경우든, 부울로 따지면 그건 사실이니까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.1P1
0.125
0이 .
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
'programing' 카테고리의 다른 글
Java에서 시간 없이 데이트하려면 어떻게 해야 하나요? (0) | 2022.08.03 |
---|---|
Vuex4 - 정의되지 않은 속성을 읽을 수 없음('상태' 읽기) (0) | 2022.08.03 |
DecimalFormat의 소수점 구분 기호를 쉼표에서 점/점으로 변경하는 방법 (0) | 2022.08.03 |
Vuejs & Vuetify : vuetify (v-slot dynamic)에서 데이터 테이블을 사용하여 템플릿을 루프하는 방법이 있습니까? (0) | 2022.08.03 |
Vue-google-map 자동 완성 양방향 바인딩이 작동하지 않음 (0) | 2022.08.03 |