آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

سوال: فرق || و && با | و &

وحید  8 سال پیش  2 سال پیش
+1 0

سلام دوستان

در بخش if و ... هم می شه از || و && استفاده کرد هم از | و &.

امروز در آموزش های استاد متوجه شدم که استاد گفتن || or منفی هست و | or بیتی!

اگر می شه لطفا توضیح بدید.

-----

برای دوستانی که نمی دونن اینا چین: | به معنی <یا> هست و & به معنی <و> که معمولا در شرط ها به کار می ره وقتی می خوایم یک شرط رو از چند لحاظ بسنجیم. مثلا فلان چیز اگر اینطوری باشه و فلان چیز اینطوری باشه و فلان چیز اینطوری باشه این کارو بکن.

 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
Rabbit  8 سال پیش
+2 0

& بیتی یعنی بیت‌های دو تا داده رو با هم and میکنه (or هم به همین‌صورت). مثلا:

 
A = 1001011
B = 1011000

A & B = 1001000
A | B = 1011011

ولی && و || کاری به بیت ندارن فقط ماحصل نتیجه طرفین خودشون رو (true یا false) با هم and و or می‌کنن.

0 0
یعنی با یدونه می شه اینطور نوشت : a & b == 1000 ولی با دوتا باید اینطور نوشت: a = 1000 && b == 1000 (8 سال پیش)
پاسخ به سوال 
Master  8 سال پیش
+4 0

ابتدا در مورد : 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") }

خطا رخ نمی ده و روال برنامه اونطوری که ما میخواهیم ادامه پیدا می کنه. چون به محض اینکه شرط اول چک می شه و نتیجه ش هم غلطه ، دیگه سراغ شرط دوم نمی ره و نتیجه کلی شرط میشه غلط. بدین ترتیب از خطای منطقی تقسیم به صفر جلوگیری شد. در واقع && مثل یک سیم هستش که وقتی تیکه اولش قطع هستش دیگه اصلا جلوتر نمی ره برای تست ادامه ی اون. پس در این شرایط استفاده از && به جای & امن تره.

البته هر کدوم از  عملگرهای بالا در شرایط خودش کاربرد داره.

** در مورد | , ||  هم میشه به صورت مشابهی بحث کرد.

 

0 0
مطالعه بیشتر لینک http://stackoverflow.com/questions/7199666/difference-between-and-in-java (8 سال پیش)
0 0
و لینک (8 سال پیش)
0 0
بله اینطور متوجه شدم که && میاد شرط ها رو برسی می کنه و به ترتیب تا جایی که درست باشه پیش میره و اگر یکی درست نبود دیگه ادامه نمی ده اما & میاد همرو برسی میکنه چه درست باشه چه نه به بعدی میره. (8 سال پیش)
0 0
سلام. مرسی از توضیحاتت، استفاده کردم. میدونم مربوط به 6 سال پیش هست، اما هم خواستم تشکر کنم و هم اینکه انجمن واقعاً در حد بسیار مناسبی غنی هست. پس دوستان حتماً از سرچ انجمن استفاده بکنند. (2 سال پیش)
0 0
فقط یک نکته: در مثال اول، اونجا که نوشتی «که اینجا هر دو غلطند»، فقط عبارت سمت چپ (x>5) غلط هست(چون x صفر هست و طبیعتا از 5 بزرگ‌تر نیست، پس غلطه) اما عبارت سمت راست (x (2 سال پیش)
0 0
فقط یک نکته: در مثال اول، اونجا که نوشتی «که اینجا هر دو غلطند»، فقط عبارت سمت چپ (x>5) غلط هست(چون x صفر هست و طبیعتا از 5 بزرگ‌تر نیست، پس غلطه) اما عبارت سمت راست(x (2 سال پیش)
0 0
اما عبارت سمت راست(x (2 سال پیش)
0 0
اما عبارت سمت راست(x < 10 ) درست هست، چون x که صفر هست طبیعتا از 10 کوچک‌تر هست، پس میشه True. بنابراین مجموعاً یک True و یک False داریم که حاصل & آنها میشه False. [در دو کامنت قبلی من متن رو کامل نوشتم و ارسال کردم، اما نمیدونم چرا نصفه ارسال شدن. پس الان مجبور شدم ادامه متن رو در کامنت دیگه‌ای بفرستم.] (2 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .