زبان برنامه نویسی سی/علائم و عملگرهای دیگر و اولویت‌ها: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
جزبدون خلاصۀ ویرایش
بدون خلاصۀ ویرایش
خط ۲:
 
 
جز پیش‌پردازنده‌ها ، شناسه‌ها ( که شناسه‌ها ، خود می‌توانند ماکروها یا تابع‌های کتابخانه‌ای باشند ) ، یادداشت‌ها و کلیدواژه‌ها هر آنچه که در زبان C باقی می‌ماند ، عملگر است ؛ جز اینکه کلیدواژه sizeof خود یک عملگر است که در همین موضوع آن را تشریح می‌کنیم . ابتدا عملگرهای دیگری جز عملگرهای یاد شده در سه موضوع پیشین را فهرست می‌کنیم و توضیح می‌دهیم که چه عملی را انجام می‌دهند و سپس بهعملگرهای نحوهمقدار خواندهدهی شدنرا عبارت‌هابازگو توسطمی‌نمائیم کامپایلرو می‌پردازیم که به کمک پرانتزها می‌توانبعد از اینکه کامپایلر عبارت ما راآن به نحونحوه دیگریخوانده بخواندشدن پیشگیریعبارت‌ها کردتوسط وکامپایلر سپسمی‌پردازیم عملگرهای مقدار دهی را بازگو می‌نمائیم و بعد از آنکه اولویت عملگرها را که علاوه بر از چپ -به -راست خوانده شدن عبارت‌ها می‌باشد بیان خواهیم نمود و در نهایت عملگر sizeof را تعریف و تشریح می‌نمائیم
<br>
<br>
خط ۶۶:
 
اگر قسمت ابتدایی موضوع را به یاد داشته باشید ، می‌دانید که عملگرهای زیادی در C وجود دارند که در ابتدای فصل هم بدان اشاره نمودیم که این عملگرها در زبان C به عنوان عملگر بیان نمی‌شوند اما علائم زیادی نظیر " و # وجود دارند که در واقع عملگر هستند . اما فراموش نکنید که شما نمی‌توانید از آنها در عبارت‌ها استفاده کنید و فقط به شکل و نحوه خاص خودشان مورد استفاده هستند که با مطالعه کامل کتاب نقش هر کدام را خواهید فهمید و اینکه کجا مجاز هستید تا از آنها استفاده کنید ( که در مورد دو مثال نوشته شده ، «"» برای ذخیره یک رشته به کار می‌رود و «#» برای دادن یک دستور مستقیم )
 
==خوانده شدن عبارت‌ها==
 
عبارت‌ها توسط کامپایلر با توجه به الویت‌ها و البته از چپ به راست خوانده می‌شوند اما برای اینکه الویت‌ها را و از چپ به راست خوانده شدن را تغییر دهیم و کاری کنیم تا کامپایلر آنگونه که ما می‌خواهیم ، عبارت را بخواند باید از پرانتزها استفاده کنیم . برای این منظور زیر‌عبارت‌ها را آنگونه که می‌خواهیم لحاظ شوند داخل حفت پرانتزهای باز و بسته می‌گذاریم که این عمل می‌تواند تو در تو نیز انجام شود . مثال :
 
{{چپ‌چین}}
<code>
((( 3 * 7 ) * (2 + 5))/8) + 6 * 2
</code>
{{پایان چپ‌چین}}
 
همان طور که از علم ریاضی به یاد دارید ، عمل ضرب و تقسیم بر عمل جمع و تفریق ، اولویت دارند و اگر از هم جدا نشده باشند هر کدام که در سمت چپ‌تر قرار داشته باشد زودتر مورد ارزیابی قرار می‌گیرد . در مثال بالا با کمک پرانتزها کل عبارت را به چند زیر عبارت تقسیم کرده‌ایم که اگر عبارت مقدار ذخیره شده در یک float باشد ، مقدار بازگردانده شده 30.375 خواهد بود چرا که ابتدا 7 * 3 و 5 + 2 مورد ارزیابی قرار می‌گیرند که حاصل اول 21 و حاصل دومی 7 است که در هم ضرب می‌شوند و عدد 147 به دست می‌آید که سپس تقسیم بر 8 می‌شود که 18.375 به دست خواهد آمد که جمع می‌شود با 6 * 2 ( که می‌شود 12 ) و در نهایت عدد 30.375 به دست می‌آید . اما اگر از پرانتزها استفاده نمی‌کردیم پاسخ ما 54.625 می‌شد
 
در ادامه همین موضوع و پس از عملگرهای مقداردهی به اولویت عملگرها می‌پردازیم
 
==عملگرهای مقداردهی==
سطر ۱۰۵ ⟵ ۹۱:
 
'''دقت کنید :''' عملگرهای مقداردهی ترکیبی فقط بر روی اعداد عمل می‌کنند و هر کدام ، قوانین عملگر ترکیب شده را در مورد عملوندهای خود انتظار دارند و اگر جز این باشد یا کامپایلر خطا می‌گیرد یا برنامه شما دارای باگ ( Bug ) خواهد بود
 
==اولویت‌ها و خوانده شدن عبارت‌ها==
 
عبارت‌ها ، توسط کامپایلر با توجه به الویت‌هاالویت عملگرها و البته از چپ به راست خوانده می‌شوند اما برای اینکه الویت‌ها را و از چپ -به -راست خوانده شدن را تغییر دهیم و کاری کنیم تا کامپایلر آنگونه که ما می‌خواهیم ، عبارت را بخواند باید از پرانتزها استفاده کنیم . برای این منظور زیر‌عبارت‌ها را آنگونه که می‌خواهیم لحاظ شوند داخل حفت پرانتزهای باز و بسته می‌گذاریم که این عمل می‌تواند تو در تو نیز انجام شود . مثال :
 
{{چپ‌چین}}
<code>
((( 3 * 7 ) * (2 + 5))/8) + 6 * 2
</code>
{{پایان چپ‌چین}}
 
همان طور که از علم ریاضی به یاد دارید ، عمل ضرب و تقسیم بر عمل جمع و تفریق ، اولویت دارند و اگر از هم جدا نشده باشند هر کدام که در سمت چپ‌تر قرار داشته باشد زودتر مورد ارزیابی قرار می‌گیرد . در مثال بالا با کمک پرانتزها کل عبارت را به چند زیر عبارت تقسیم کرده‌ایم که اگر عبارت مقدار ذخیره شده در یک float باشد ، مقدار بازگردانده شده 30.375 خواهد بود چرا که ابتدا 7 * 3 و 5 + 2 مورد ارزیابی قرار می‌گیرند که حاصل اولاولی 21 و حاصل دومی 7 است که در هم ضرب می‌شوند و عدد 147 به دست می‌آید که سپس تقسیم بر 8 می‌شود که 18.375 به دست خواهد آمد که جمع می‌شود با 6 * 2 ( که می‌شود 12 ) و در نهایت عدد 30.375 به دست می‌آید . اما اگر از پرانتزها استفاده نمی‌کردیم پاسخ ما 54.625 می‌شد
 
بنابراین « اولویت » یا Precedence به دیرتر یا زودتر لحاظ شدن یک عنصر زبان C می‌گویند . بالاترین اولویت در یک برنامه C با یادداشت‌ها (Comments) می‌باشد که هر آنچه بعد از دو اسلش / به صورت // در آن خط قرار گرفته باشد یا هر آنچه بین */ و /* قرار گرفته باشد نادیده گرفته خواهد شد . اولویت بعدی با پیش‌پردازنده‌ها Preprocessors که با علامت شارپ (Sharp) # آغاز می‌شوند و زودتر از عنصرهای دیگر سازنده متن برنامه C مورد ارزیابی و لحاظ شدن قرار می‌گیرند . سپس توابع و حکم‌ها در اولویت‌ها هستند که در آنها ممکن است بخش‌هایی از عملوندهایی به همراه عملگرهای بازگو شده در این فصل ، استفاده شده باشند که به آنها عبارت می‌گوئیم . عبارت‌ها می‌توانند ترکیبی باشند و یا توسط پرانتزها به چند یا چندین زیر عبارت تقسیم شده باشند که در هر زیر عبارت نیز کامپایلر در نهایت باید با توجه به اولویت عملگرها ؛ زیر عبارت‌ها و در نهایت کل عبارت را ارزیابی نماید
 
در یک عبارت و یا حتی زیر عبارت ، اولویت‌ها بدین ترتیب می‌باشند ( که اگر چند عملگر اولویت یکسانی داشته باشند ، آنکه در سمت چپ‌تر قرار دارد زودتر مورد ارزیابی قرار خواهد گرفت ) :
 
۱ − شناسه‌ها
 
۲ − رشته‌ها
 
۳ − پرانتزهای تابع ، کروشه‌های آرایه ، عملگرهای انتخاب عضو ساختمان یا اجتماع ( . و <- ) ، عملگرهای افزایش و کاهش پس از شناسه ( ++a و --a )
 
۴ − عملگر sizeof ، عملگر اشاره‌گر و آدرس دهی ( * و & ) ، افزایش و کاهش پیش از شناسه ( a++ و a-- ) ، نه منطقی (!) ، نه بیتی (~)
 
۵ − پرانتزهای کست‌کردن (int(a))
 
۶ − ضرب ، تقسیم و باقی‌مانده ( * و / و % )
 
۷ − جمع و تفریق ( + و - )
 
۸ − انتقال بیتی به چپ و راست ( 5>>a و 2<<a )
 
۹ − عملگرهای مقایسه‌ای ( a < b و a > b و a <= b و a >= b )
 
۱۰ − عملگرهای تساوی ( a == b a != b )
 
۱۱ − و بیتی ( a & b )
 
۱۲ − زور بیتی ( a ^ b )
 
۱۳ − یا بیتی ( a | b )
 
۱۴ − و منطقی ( a && b )
 
۱۵ − یا منطقی ( a || b )
 
۱۶ − عملگرهای شرطی ( a ? b : c )
 
۱۷ − عملگرهای مقداردهی ( a = b و a += b و a -= b و a *= b و a /= b و a %= b و a &= b و a ^= b و a |= b و a <<= b و a >>= b )
 
۱۸ − عملگر کاما برای نادیده گرفتن (a,b)
 
شما می‌توانید با کمک پرانتزهای باز و بسته که می‌تواند تو در تو نیز باشد ، عبارت خود را به زیر عبارت‌هایی تقسیم کنید تا زودتر مورد ارزیابی قرار بگیرند و از اینکه کامپایلر کد شما را به گونه‌ای جز آنکه مد نظر شماست بخواند ، جلوگیری کنید
 
==عملگر sizeof==
 
[[رده:زبان برنامه نویسی سی]]