বাম থেকে ডান অভিব্যক্তিটি চলুন:
a[ 0xFULL?'\0':-1:>>>=a<:!!0X.1P1 ]
প্রথম যে বিষয়টি আমি লক্ষ্য করছি তা হ'ল আমরা এর ব্যবহার থেকে টের্নারি অপারেটরটি ব্যবহার করছি ?
। সুতরাং subexpression:
0xFULL ? '\0' : -1
বলছে "যদি 0xFULL
শূন্য-না হয়, ফিরে আসুন '\0'
, নাহলে -1
। স্বাক্ষরযুক্ত স্বাক্ষরিত দীর্ঘ-দীর্ঘ প্রত্যয়0xFULL
সহ একটি হেক্সাডেসিমাল আক্ষরিক - এর অর্থ এটি হেক্সাডেসিমাল টাইপের টাইপের That এটি সত্যিকার অর্থে গুরুত্বপূর্ণ নয়, কারণ নিয়মিত পূর্ণসংখ্যার অভ্যন্তরে ফিট হতে পারে।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
তাই লুপটি কখনই প্রবেশ করে না।
ফলস্বরূপ, ?
তিনবার মুদ্রিত হয়।