سوال: فرق || و && با | و &
سلام دوستان
در بخش if و ... هم می شه از || و && استفاده کرد هم از | و &.
امروز در آموزش های استاد متوجه شدم که استاد گفتن || or منفی هست و | or بیتی!
اگر می شه لطفا توضیح بدید.
-----
برای دوستانی که نمی دونن اینا چین: | به معنی <یا> هست و & به معنی <و> که معمولا در شرط ها به کار می ره وقتی می خوایم یک شرط رو از چند لحاظ بسنجیم. مثلا فلان چیز اگر اینطوری باشه و فلان چیز اینطوری باشه و فلان چیز اینطوری باشه این کارو بکن.
& بیتی یعنی بیتهای دو تا داده رو با هم and میکنه (or هم به همینصورت). مثلا:
A = 1001011
B = 1011000
A & B = 1001000
A | B = 1011011
ولی && و || کاری به بیت ندارن فقط ماحصل نتیجه طرفین خودشون رو (true یا false) با هم and و or میکنن.
ابتدا در مورد : And
همانطور که می دونی and زمانی True (یک) است که که هر دو عملوند آن همزمان یک باشند.
خوب حالا تفاوت & و && :
عملگر & یک عملگر بیتی هستش . یعنی بیت به بیت دو طرف رو and می کنه. و این به عبارت ساده تر یعنی اول میاد جفت عملوند ها را حساب می کنه می ذاره کنار . بعد اونا رو با هم And می کنه . یعنی کار به کدوم عملوند اول اومده کدوم دوم نداره. دو عبارت مستقل رو and می کنه و نتیجه نهایی بدست میاد.
اما عملگر && منطقیه. اینجوری بگم که به فکر انسان نزدیکتره. و کمی هوشمندی داخلشه. یعنی میاد اولین عبارت عملگر رو چک می کنه ، اگه درست بود حالا میره برای چک گردن سمت دیگه. و اگر غلط بود دیگه ادامه نمی ده.
مثال :
x=0 ; if ( (x>5)&(x<10){ print ("YES") } else { print("NO") }
در اینجا میاد دو طرف شرط رو اول بررسی می کنه . که اینجا هر دو غلطند . پس نتیجه نهایی غلط خواهد بود. و چاپ "NO"
اما در
x=0 ; if ( (x>5)&&(x<10) { print ("YES") } else { print("NO") }
اول میاد اولین عبارت کهx>5 هست رو حساب می کنه . که در اینجا غلطه . و چون در And برای درستی باید هردو طرف درست باشند پس در اینجا دیگه لزومی بر ادامه ی کار نمی بینه. و نتیجه کلی رو غلط برمی گردونه. (بدون بررسی سمت دوم شرط) نهایتا چاپ "NO"
اما مزیت && در جلوگیری از یکسری خطاهای منطقی ست.
مثلا در دستور
x=0 ; if ( (x!=0)&(1/x<10) { print ("YES") } else { print("NO") }
خطای تقسیم بر صفر داریم. چون تا میاد دو طرف رو حساب کنه میخوره به یک تقسیم بر صفر که خطاست.
ولی در کد زیر
x=0 ; if ( (x!=0)&&(1/x<10) { print ("YES") } else { print("NO") }
خطا رخ نمی ده و روال برنامه اونطوری که ما میخواهیم ادامه پیدا می کنه. چون به محض اینکه شرط اول چک می شه و نتیجه ش هم غلطه ، دیگه سراغ شرط دوم نمی ره و نتیجه کلی شرط میشه غلط. بدین ترتیب از خطای منطقی تقسیم به صفر جلوگیری شد. در واقع && مثل یک سیم هستش که وقتی تیکه اولش قطع هستش دیگه اصلا جلوتر نمی ره برای تست ادامه ی اون. پس در این شرایط استفاده از && به جای & امن تره.
البته هر کدوم از عملگرهای بالا در شرایط خودش کاربرد داره.
** در مورد | , || هم میشه به صورت مشابهی بحث کرد.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .