चलो बाएं से दाएं अभिव्यक्ति के माध्यम से चलते हैं:
a[ 0xFULL?'\0':-1:>>>=a<:!!0X.1P1 ]
पहली बात जो मैंने नोटिस की, वह यह है कि हम टर्नेरी ऑपरेटर के उपयोग से उपयोग कर रहे हैं ?। तो उपसर्ग:
0xFULL ? '\0' : -1
कह रहा है, "अगर 0xFULLगैर शून्य, वापसी है '\0', अन्यथा -1। 0xFULLसाथ हेक्साडेसिमल शाब्दिक है अहस्ताक्षरित लंबे समय से लंबे प्रत्यय - जिसका अर्थ यह प्रकार का एक हेक्साडेसिमल शाब्दिक है unsigned long longकि वास्तव में बात करें, क्योंकि ऐसा नहीं करता। 0xFएक नियमित पूर्णांक के अंदर फिट कर सकते हैं।
साथ ही, टर्नरी ऑपरेटर दूसरे और तीसरे शब्दों के प्रकारों को उनके सामान्य प्रकार में परिवर्तित करता है। '\0'तब परिवर्तित किया जाता है int, जो कि बस है 0।
का मान 0xFशून्य से बड़ा है, इसलिए यह गुजरता है। अब अभिव्यक्ति बन जाती है:
a[ 0 :>>>=a<:!!0X.1P1 ]
अगला, :>एक डिग्राफ है । यह एक निर्माण है जो कि विस्तार करता है ]:
a[0 ]>>=a<:!!0X.1P1 ]
>>=हस्ताक्षरित सही शिफ्ट ऑपरेटर है, हम aइसे स्पष्ट करने के लिए बाहर से अंतरिक्ष कर सकते हैं ।
इसके अलावा, <:एक डिग्राफ है जिसका विस्तार है [:
a[0] >>= a[!!0X.1P1 ]
0X.1P1एक घातांक के साथ एक हेक्साडेसिमल शाब्दिक है। लेकिन मूल्य का कोई फर्क नहीं पड़ता, जो !!कुछ भी गैर-शून्य है वह सच है। 0X.1P1है 0.125जो गैर-शून्य है, तो यह हो जाता है:
a[0] >>= a[true]
-> a[0] >>= a[1]
>>=पर हस्ताक्षर किए सही पारी ऑपरेटर है। यह ऑपरेटर के दाईं ओर के अपने बिट्स को आगे की ओर मोड़कर अपने बाएं ऑपरेंड के मूल्य को बदल देता है। 10बाइनरी में है 1010। तो यहाँ कदम हैं:
01010 >> 1 == 00101
00101 >> 1 == 00010
00010 >> 1 == 00001
00001 >> 1 == 00000
>>=इसके संचालन का परिणाम देता है, इसलिए जब तक शिफ्टिंग a[0]हर बार गैर-शून्य रहती है तब तक इसके बिट्स को एक-एक करके दाएं से शिफ्ट किया जाता है। चौथा प्रयास वह a[0]होता है 0, जहां लूप कभी दर्ज नहीं होता है।
परिणामस्वरूप, ?तीन बार मुद्रित किया जाता है।