एक बयान में आपके सभी स्वैप लेखन, आप बाहरी a^=(...)
अभिव्यक्ति के भीतरी a^=b
अभिव्यक्ति रिश्तेदार के साइड इफेक्ट पर निर्भर हो रहे हैं। आपका जावा और सी ++ कंपाइलर्स चीजें अलग-अलग कर रहे हैं।
आदेश XOR स्वैप ठीक से करने के लिए, आप कम से कम दो बयानों का उपयोग करना पड़:
a ^= b;
a ^= (b ^= a);
हालांकि, चर स्वैप करने के लिए सबसे अच्छा तरीका है कि यह एक अस्थायी चर के साथ सांसारिक तरीके से करना है, और संकलक का सबसे अच्छा तरीका चयन करने देने के लिए वास्तव में यह कार्य करें:
int t = a;
a = b;
b = t;
सबसे अच्छा मामले में, संकलक उत्पन्न होगा ऊपर अदला-बदली के लिए सभी में कोई कोड, और बस रजिस्टरों किपकड़ इलाज शुरू कर देंगेऔर b
दूसरी तरफ। आप कोई भी मुश्किल xor कोड नहीं लिख सकते जो बिल्कुल कोई कोड नहीं धड़कता है।
स्रोत
2010-10-12 08:19:56
इस तरह के एक उच्च स्तर पर बचा जाना चाहिए: http://en.wikipedia.org/wiki/XOR_swap_algorithm#Reasons_for_avoidance_in_practice – JoshD