Vamos passar pela expressão da esquerda para a direita:
a[ 0xFULL?'\0':-1:>>>=a<:!!0X.1P1 ]
A primeira coisa que noto é que estamos usando o operador ternário do uso de ? . Então a subexpressão:
0xFULL ? '\0' : -1
está dizendo "se 0xFULLfor diferente de zero, retorne '\0', caso contrário -1. 0xFULLé um literal hexadecimal com o sufixo longo não assinado - o que significa que é um literal hexadecimal do tipo unsigned long long. Isso realmente não importa, porque 0xFpode caber dentro de um número inteiro regular.
Além disso, o operador ternário converte os tipos do segundo e do terceiro termos no tipo comum. '\0'é então convertido para int, o que é justo 0.
O valor de 0xFé muito maior que zero, então passa. A expressão agora se torna:
a[ 0 :>>>=a<:!!0X.1P1 ]
Em seguida, :>é um dígrafo . É uma construção que se expande para ]:
a[0 ]>>=a<:!!0X.1P1 ]
>>=é o operador de turno certo assinado, podemos separá-lo apara torná-lo mais claro.
Além disso, <:é um dígrafo que se expande para [:
a[0] >>= a[!!0X.1P1 ]
0X.1P1é um literal hexadecimal com um expoente. Mas não importa o valor, o valor !!de qualquer coisa que não seja zero é verdadeiro. 0X.1P1é 0.125que é diferente de zero, então ele se torna:
a[0] >>= a[true]
-> a[0] >>= a[1]
O >>=é o operador de turno certo assinado. Ele altera o valor do seu operando esquerdo, deslocando seus bits para a frente pelo valor no lado direito do operador. 10em binário é 1010. Então, aqui estão as etapas:
01010 >> 1 == 00101
00101 >> 1 == 00010
00010 >> 1 == 00001
00001 >> 1 == 00000
>>=retorna o resultado de sua operação, desde que o deslocamento a[0]permaneça diferente de zero para cada vez que seus bits forem deslocados para a direita em um, o loop continuará. A quarta tentativa é ondea[0] fica 0, então o loop nunca é inserido.
Como resultado, ?é impresso três vezes.