חידה שנזכרתי בה:

gilad_no

New member
חידה שנזכרתי בה:

לא כ"כ קשה, אבל בכל זאת: איך להחליף ערכים של 2 משתנים, בלי להשתמש במשתנה שלישי.
int x=1,y=2; swap(x,y); // x=2,y=1​
 
שתי שיטות עיקריות

1. a^=b^=a^=b; 2. a += b b -= a a -= b (אפשר לכתוב את זה גם בשורה אחת)​
 

fatfish

New member
בעזרת אוגר???

זה כמו להגדיר משתנה נוסף...לא עשית בזה כלום....
 

gilad_no

New member
בערך

_asm { push x push y pop x pop y }​
משתמשים במחסנית, לא באוגר או משתנה. אבל תמיד יהיה מי שייטען שזה כמו משתנה נוסף (בגלל זה אמרתי - קצת רמאות)
 
לא מכיר...

אבל אני מקווה שלא מדובר בשימוש ב*אוגר* עזר (דינו כדין משתנה עזר) או בהכנסה למחסנית (דינה כדין משתנה עזר מקומי בפונקציה). בכל מקרה אני אשמח לשמוע על מה חשבת...
 

אלדד28

New member
כן, גם לי לא ברור למה הכנסתם אסמבלי

ולא ציינתם את XCHG... אגב, גלעד, אני לא משוכנע ש-4 push ו-pop יעלו פחות מ-3 xor-ים.
 

selalerer

New member
אבל משתנים נמצאים בזכרון, אז להעביר

אותם לאוגרים יהיה כבר שימוש במקום אחסון נוסף.
 

1אברהם

New member
וגם זה לא יעבוד תמיד

אם המשתנים הם מסוג float או אפילו double למשל נסה a=1000 b=0.001
 

tenen

New member
הטריק יעבוד תמיד

a=a+b b=a-b a=a-b בכלל לא רלוונטי מה המספרים, מתמתיקה זה דבר יפה...
 

אלדד28

New member
הבעיה היא שקומפיילרים הם לא

מכונות מתימטיות מדויקות, אלא דווקא להיפך, מוגבלות מאוד מאוד.
 

neko

New member
../images/Emo58.gif היה לי השאלה בעבודה

באסמבלי - ע"י XOR-ים
 
למעלה