2013-06-01 13 views
5

यहां मैं n1 के बराबर अंक 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 

कम ऑपरेटरों के साथ किसी भी वैकल्पिक समाधान?

+2

जब आप 'n + p> 31' करते हैं तो आप अनिर्धारित व्यवहार का आह्वान कर रहे हैं। यदि यह कभी भी मामला नहीं होने की गारंटी है, तो आपके पास अभी भी एक नकारात्मक संख्या को स्थानांतरित करने के लिए कार्यान्वयन-परिभाषित व्यवहार है। लेकिन अगर आप यूबी से डरते नहीं हैं, तो '((1 << n) - 1) << p' के बारे में क्या? –

+0

@ मेरी समस्या में डैनियल फिशर '(एन + पी) '31 से आगे नहीं जायेगा। और यह भी पहचानना आसान है ... – noufal

+1

वैसे भी, अगर आप केवल बिट्स की परवाह करते हैं, तो मैं एक हस्ताक्षरित प्रकार का उपयोग करने की सलाह दूंगा, और फिर '((1 << n) - 1) << p' तब तक सुरक्षित है जब तक कि' n' या 'p' ऋणात्मक या प्रकार की चौड़ाई से अधिक या बराबर न हो। –

उत्तर

5

आप इस तरह यह कर सकते हैं:

return ((1<<n)-1)<<p; 

स्थिति शून्य पर n लोगों बनाने के लिए, गणना (2^n)-1; याद रखें कि 2^n1<<n है, इसलिए अभिव्यक्ति ((1<<n)-1) बन जाती है। अब आपको पीछे की ओर p शून्य जोड़ना होगा, इसलिए p द्वारा परिणाम को छोड़ दें।

+0

@ Daniel फिशर ने वही जवाब दिया ... स्पष्टीकरण के लिए धन्यवाद ... – noufal

संबंधित मुद्दे