שאלה:

yair24

Member
שאלה:

אם יש לי משתנה INT שקוראים לו VSWITCH עכשיו אני עושה שורה כזאת: VSWITCH=0 ואחרי זה אני עושה VSWITCH=!VSWITCH למה יהיה שווה עכשיו VSWITCH? יאיר
 

hazgul

New member
זו תהיה שגיאת קימפול

האופרטור =! הוא אופרטור השוואה, כמו למשל == או <=, כלומר, אפשר להשתמש בו רק במשפטי תנאי (כמו IF ו SWITCH). מקווה שהבנת... האזגול
 

sadov

New member
לא רק במשפטי תנאי !

אפשר להשתמש באופרטורים של השוואה בכל שלב בקוד. הביטוי יחזיר ערך של 0 או 1... דוגמה בקובץ המצורף. אם לזה התכוונת אז הביטוי vswutch != vswitch תמיד יחזיר 0
 

yair24

Member
לא שאלתי על האופרטור !=

שאלתי על האופרטור ! בלבד זה אופרטור NOT
 

sadov

New member
1

ב ++C/C הקומפיילר יבצע קודם את צד שמאל (vswitch!) שיחזיר 1 מכיוון ש vswitch = 0 ולאחר מיכן יבצע את ההשמה.
 

yair24

Member
הבהרה!

אני אאכתוב את המשפט במילים VSWITCH שווה לNOT של VSWITCH אוקיי? עכשיו השאלה שלי מה יקרה פה אם VSWITCH שווה ל0 בהתחלה יש שתי אפשרויות 1) VSWITCH יהיה שווה ל1 בגלל שNOT של 0 הוא 1 2) VSWITCH יהיה שווה למינוס 32767 בגלל שכל 16 הביטים של הINT יתחלפו ויהיו אחדים אני שואל מה יקרה פה האם מקרה 1 או מקרה 2? יאיר
 

sadov

New member
תשובה

כמו שכתבתי לך בתגובה הראשונה, VSWITCH! יבוצע קודם (מיקרה שהוא 0 יחזיר 1, כל מספר אחר חיובי או שלילי יחזיר 0) לאחר מכן תתבצע ההשמה (במקרה שלך לתוך VSWITCH) האופרטור ~ הוא אופרטור bitwise not (עובד על ביטים מכבה/מדליק) הדרך הטובה ביותר לילמוד את הדברים האלה זה לכתוב קוד קצר ולהריץ עם דיבגר שורה שורה וליראות מה הקומפיילר מבצע!
 

ihovav

New member
כמו ש SADOV כתב :

התוצאה תהיה 1 - מאחר והערך במשתנה הוא 0 במידה והערך היה שונה - התוצאה היתה 1 - לא צריך שהערך יהיה 1 בשביל זה כמו שאתה כותב בתנאי IF : (IF(A - במידה והערך יהיה 0 - התנאי יחזיר תוצאה של 0 ולא יתבצע ובמידה והערך אינו 0 הוא יחזיר 1 ויתבצע
 
למעלה