किसी आईएसओ कैलेंडर के लीप वर्ष (: Odd bit manipulations लिंक): जाँच के लिए एक आश्चर्यजनक तेजी से कार्यान्वयन गिरालीप वर्ष बिटवाइज़ ऑपरेटर्स (आश्चर्यजनक गति) का उपयोग कर जांच JSPerf पर
function isLeapYear(year) {
return !(year & 3 || year & 15 && !(year % 25));
}
Node.js का उपयोग करना, मैं जल्दी से जाँच की यह मुझे पता है कि दो अन्य एक लाइनर कार्यान्वयन के खिलाफ।
function isLeapClassic(y) { return (y % 4 == 0) && !(y % 100 == 0) || (y % 400 == 0); }
function isLeapXOR(y) { return (y % 4 == 0)^(y % 100 == 0)^(y % 400 == 0); }
function isLeapBitwise(y) { return !(y & 3 || y & 15 && !(y % 25)); }
//quick'n'dirty test on a small range!
//works with negative integers too
for (var i = 1900; i <= 2100; i++) {
console.log(
"year = %d,\t%d%d%d",
i,
isLeapClassic(i),
isLeapXOR(i),
isLeapBitwise(i)
);
}
यह अपेक्षा के अनुसार काम करता है, लेकिन मेरी समस्या यह है कि मैं कैसे नहीं समझ सकता। मुझे ((a % b) == (a & (b-1))
पता है जब बी दो (year % 4) == (year & 3)
की शक्ति है, लेकिन year & 15 && !(year % 25)
पता लगाने में काफी मुश्किल है। क्या कोई मुझे समझा सकता है कि यह कैसे काम करता है? इस कार्यान्वयन के बारे में कोई संदर्भ?
जिज्ञासा से बाहर: अनुकूलित करने के लिए उपयोगकेस वास्तव में क्या है? – user123444555621
अद्भुत गति! यह दिलचस्प है अगर आप पाठ्यक्रम की लाइब्रेरी लिखने की योजना बना रहे हैं! – Redger
मैं नैनोसेकंद के प्रदर्शन लाभ के लिए कभी भी पठनीयता को त्याग नहीं दूंगा। – user123444555621