का उपयोग कर बिट रिवर्सल मैं बाइट में थोड़ा उलटा करने की कोशिश कर रहा हूं। मैं नीचेबिटवार्स
static int BitReversal(int n)
{
int u0 = 0x55555555; // 01010101010101010101010101010101
int u1 = 0x33333333; // 00110011001100110011001100110011
int u2 = 0x0F0F0F0F; // 00001111000011110000111100001111
int u3 = 0x00FF00FF; // 00000000111111110000000011111111
int u4 = 0x0000FFFF;
int x, y, z;
x = n;
y = (x >> 1) & u0;
z = (x & u0) << 1;
x = y | z;
y = (x >> 2) & u1;
z = (x & u1) << 2;
x = y | z;
y = (x >> 4) & u2;
z = (x & u2) << 4;
x = y | z;
y = (x >> 8) & u3;
z = (x & u3) << 8;
x = y | z;
y = (x >> 16) & u4;
z = (x & u4) << 16;
x = y | z;
return x;
}
कोड का उपयोग यह बिट (32-बिट मशीन पर) Reverser सकते हैं, लेकिन वहाँ एक समस्या, उदाहरण के लिए, इनपुट १०००१११११०१ है, मैं +१०१११११०००१ प्राप्त करना चाहते हैं, लेकिन इस विधि है शीर्षक 0s सहित पूरे बाइट को उलट देगा। आउटपुट 10111110001000000000000000000000 है। क्या वास्तविक संख्या को रिवर्स करने के लिए कोई तरीका है? मैं इसे स्ट्रिंग और रिवर्सर में कनवर्ट नहीं करना चाहता, फिर फिर से कनवर्ट करना चाहता हूं। क्या कोई शुद्ध गणित विधि या बिट ऑपरेशन विधि है?
शुभकामनाओं सहित,
हालांकि मैं आपकी विधि को समझता हूं: यह संकलित नहीं हो सकता है क्योंकि आप यू 4 का उपयोग करते हैं और इसे आपके उदाहरण में परिभाषित नहीं किया है। –
int u4 = 0x0000FFFF जोड़ें; – user287792
यह कारण नहीं है, मुझे बस याद आती है। –