this पद है, जो हाल ही में upvotes के कुछ उल्लेखनीय गुच्छा प्राप्त हुआ है, सी
में +
ऑपरेटर के बारे में पूछ यह पता चलता है नहीं है निम्नलिखित कार्यान्वयन:क्या यह पूर्ण योजक कार्यान्वयन सही है?
// replaces the + operator
int add(int x, int y) {
while(x) {
int t = (x & y) <<1;
y ^= x;
x = t;
}
return y;
}
संयोगवश, मैं एक कार्यान्वयन अपने आप को भी लिखा था (एक एल्गोरिदम पुस्तक अभ्यास) और उसके साथ आया:
uint32_t bit_add(uint16_t a, uint16_t b) {
uint32_t carry = ((uint32_t) a & b) << 1;
uint16_t add = a^b;
return carry^add;
}
मैंने इसे दो बार परीक्षण किया और ऐसा लगता है। बात यह है कि, संदर्भित पोस्ट से कार्यान्वयन की तुलना में यह काफी तेज है, जिसमें x86 पर किसी भी कूद की कमी है।
क्या मेरा कार्यान्वयन सही है या क्या कुछ गड़बड़ है जिसके बारे में मुझे पता नहीं है?
मैं कल्पना नहीं कर सकता कि मेरे कोड को एक पोस्ट के कोड से तेज़ होना चाहिए, जिसे अक्सर देखा और समीक्षा की जाती है।
मैंने जांच नहीं की, लेकिन यह सही हो सकता है। मान लें कि लोग हर समय सबसे कुशल कोड लिखते हैं; इन सभी उत्तरों को खिलौनों की समस्याओं के लिए या प्रदर्शन उद्देश्यों के लिए बनाया गया था, वास्तविक उपयोग के लिए नहीं (+ अभी भी तेज है)। – Cubic
दो उदाहरण differents हैं, पहले लूप में प्रति निर्देश एक बिट संचालित करता है, आपके सभी बिट प्रभावित होते हैं। कंपाइलर भी आपके कोड को अनुकूलित कर सकता है। – purplepsycho
3 और 7 जोड़ने का प्रयास करें, यह आउटपुट 2. – Kenney