यहां मैं n
1
के बराबर अंक p
से शुरू करने के लिए थोड़ा पैटर्न उत्पन्न करना चाहता हूं। अंक 0 to 31
से गिने गए हैं। मैंने जो किया है उसके बाद।बिटवाई ऑपरेटरों का उपयोग करके विशेष बिट पैटर्न उत्पन्न करना
int bitPattern(int n, int p) {
int hex, num1, num2;
hex = 0x80000000;
num1 = (hex >> (31 - p));
num2 = (hex >> (31 - (n+p)));
return num1^num2;
}
उदाहरण:
bitPattern(6, 2) should return
..000011111100
कम ऑपरेटरों के साथ किसी भी वैकल्पिक समाधान?
जब आप 'n + p> 31' करते हैं तो आप अनिर्धारित व्यवहार का आह्वान कर रहे हैं। यदि यह कभी भी मामला नहीं होने की गारंटी है, तो आपके पास अभी भी एक नकारात्मक संख्या को स्थानांतरित करने के लिए कार्यान्वयन-परिभाषित व्यवहार है। लेकिन अगर आप यूबी से डरते नहीं हैं, तो '((1 << n) - 1) << p' के बारे में क्या? –
@ मेरी समस्या में डैनियल फिशर '(एन + पी) '31 से आगे नहीं जायेगा। और यह भी पहचानना आसान है ... – noufal
वैसे भी, अगर आप केवल बिट्स की परवाह करते हैं, तो मैं एक हस्ताक्षरित प्रकार का उपयोग करने की सलाह दूंगा, और फिर '((1 << n) - 1) << p' तब तक सुरक्षित है जब तक कि' n' या 'p' ऋणात्मक या प्रकार की चौड़ाई से अधिक या बराबर न हो। –