का उपयोग कर bit twiddling hacks वेबसाइट बिट्स उल्टा करने के लिए निम्नलिखित बहुत ही कुशल समारोह का प्रस्ताव:Bitswap समारोह टेम्पलेट metaprogramming
// Bitswap: reverse the bits of the value of unsigned integral type T
template <class T>
constexpr T bitswap(T src)
{
constexpr std::size_t char_bit = std::numeric_limits<unsigned char>::digits;
constexpr std::size_t digits = sizeof(T) * char_bit;
std::size_t size = digits;
T mask = ~T();
while ((size >>= 1) > 0) {
mask ^= (mask << size);
src = ((src >> size) & mask) | ((src << size) & ~mask);
}
return src;
}
- वहाँ टेम्पलेट metaprogramming प्रत्यावर्तन का उपयोग कर पाश उतारना करने के द्वारा इस समारोह में तेजी लाने के कोई तरीका है?
- क्या इसे
__uint128_t
जैसे विस्तारित प्रकारों के साथ काम करने का कोई तरीका है? (मूल संस्करण__uint128_t
के साथ काम करता है) - क्या यह कार्य सैद्धांतिक रूप से दो बिट्स की गैर-शक्ति वाले प्रकारों के बिट्स को उलट करने के लिए काम करता है यदि
digits
सही संख्या में बिट्स की सही संख्या में प्रारंभ किया गया है? (उदाहरण के लिए एक हाइपोथिकलuint41_t
)।
क्या आपने जांच की है कि 1. एक गैर-टेम्पलेट एक अनलॉक किया गया है, 2. एक दूसरा पैरामीटर अंक बाएं ले जाने वाला एक रिकर्सिव अनलॉक किया गया है (संभवतः w/a helper)? – lorro
ऑप्टिमाइज़ेशन का उपयोग करते समय इन दिनों अधिकांश कंप्यूटर्स आवश्यक रूप से लूप को अनलॉक करने के लिए पर्याप्त जानते हैं, इसलिए मैं इसके बारे में चिंता नहीं करता जब तक कि यह बिना अनुकूलन के धीमे गति से चलता है। – JAB