≫>>= C operatör?
Bir bulmaca gibi bir arkadaşı tarafından verilen, bu C program aslında derler ve çalışır bir türlü anlamıyorum. >>>=
Bu operatör ve garip 1P1
edebi nedir? Çınlama ve GCC test var. Uyarılar Yok ve çıkış "???"
#include <stdio.h>
int main()
{
int a[2]={ 10, 1 };
while( a[ 0xFULL?'\0':-1:>>>=a<:!!0X.1P1 ] )
printf("?");
return 0;
}
CEVAP
Satır:
while( a[ 0xFULL?'\0':-1:>>>=a<:!!0X.1P1 ] )
digraphs :>
ve ]
[
sırasıyla çevirmek <:
, içerir, eşdeğer için:
while( a[ 0xFULL?'\0':-1 ] >>= a[ !!0X.1P1 ] )
0xFULL
değişmez 0xF
aynı 15
hex); ULL
sadece it's an unsigned long long
literal belirtir. Bir boolean gibi herhangi bir durumda, doğru 0xFULL ? '\0' : -1
sadece 0
olan character literal '\0'
olur.
Bu arada 0X.1P1
hexadecimal floating point literal 2/16 = 0.125 eşittir. Her durumda, sıfır gibi, aynı zamanda mantıksal değer olarak doğrudur, iki kere !!
ile tekrar inkar 1
üretir. Böylece, her şeyi basitleştirir!
while( a[0] >>= a[1] )
23* *operatör bit-bit vardiya sağ işlenen tarafından verilen numarasını bıraktı işlenen ve sonuç döndürür compound assignment. Bu durumda, hakkı a[1]
her zaman değerine denk geliyor yani 1
: işlenen vardır
while( a[0] >>= 1 )
kullanır:
while( a[0] /= 2 )
a[0]
başlangıç değeri 10'dur. Hemen sonra vites sonra 5, sonra (aşağı yuvarlama) 2, sonra 1 ve hangi noktada döngü sona erer 0, nihayet oldu. Böylece, döngü gövdesinin üç kez idam alır.
Nasıl C köşeli operatör aşırı yükleme ...
Orada C Python eşdeğer# boş birleşiyor...
Operatör<< gerekir; bir üyesi ola...
'??&operatör#039; olamaz türündek...
C 's "kötü" ama Scala�...