फ़ंक्शन को एन के प्रतिनिधित्व में बिट्स की संख्या वापस करने के लिए प्रेरित किया गया है। अन्य उत्तरों में क्या चूक गया है, यह है कि फ़ंक्शन तर्क 0 n0. तर्कों के लिए अपरिभाषित व्यवहार का आह्वान करता है। ऐसा इसलिए है क्योंकि फ़ंक्शन कम से कम उच्चतम से शुरू होने पर संख्या को एक बार दूर करता है। नकारात्मक संख्या के लिए इसका मतलब है कि लूप समाप्त होने से पहले एन का अंतिम मान (2-पूरक में 32-बिट पूर्णांक के लिए) 0x8000000 है। यह संख्या INT_MIN है और यह अब आखिरी बार पाश में प्रयोग किया जाता है:
n = n&(n-1)
दुर्भाग्य से, INT_MIN -1 एक अतिप्रवाह है और अतिप्रवाह अपरिभाषित व्यवहार आह्वान। पूर्णांक को "चारों ओर लपेटने" के लिए एक अनुरूप कार्यान्वयन की आवश्यकता नहीं है, उदाहरण के लिए यह एक ओवरफ्लो जाल जारी कर सकता है या सभी प्रकार के अजीब परिणाम छोड़ सकता है।
स्रोत
2010-07-16 16:28:04
जो दिखाता है कि 'f' इस फ़ंक्शन के लिए एक भयानक नाम है। –
एक टिप्पणी या दो को चोट नहीं पहुंचीगी, या तो। –
कोड खराब दिखता है, लेकिन 30 सेकंड के बाद यह सुरुचिपूर्ण दिखाई देता है। और कुशल। "सी प्रोग्रामर अपने पहचानकर्ताओं में अधिक इरादा क्यों नहीं रखते हैं?" का एक अच्छा उदाहरण है क्योंकि वे शक्तिशाली होने के लिए पर्याप्त क्रिप्टिक होना पसंद करते हैं। " – TheBlastOne