2008-12-08 19 views
6

कृपया मुझे बताएं कि मैं थोड़ा प्रिंट कैसे करूं, जैसे printf("%d",bit);मैं एक बिट कैसे मुद्रित करूं?

+0

यह एक अच्छा सवाल है जिसे रीफ्रिसिंग की आवश्यकता है, लेकिन मेरे पास अभी तक संपादन विशेषाधिकार नहीं हैं .... –

उत्तर

19

बिट सिर्फ एक पूर्णांक है कि, मूल्य आप कम से कम महत्वपूर्ण बिट में चाहते हैं तो यह है:

printf("%d", bit & 0x1); 

यह करना चाहिए। & एक बाइनरी कर रहा है- और केवल पहले महत्वपूर्ण बिट सेट के साथ एक संख्या के साथ, तो आप पूर्णांक में बाकी सभी बिट्स को हटा रहे हैं।

+0

ध्यान रखें कि एक बिट निकालना एक बहु-बाइट संख्या से आप अंतहीन मुद्दों में भाग लेते हैं। – gnud

+4

@gnud: यह पॉइंटर्स का उपयोग करते हुए स्मृति के विरुद्ध किए जाने पर ही लागू होता है। बिट और 0x1 हमेशा काम करेगा, भले ही मूल्य स्मृति में संग्रहीत किया गया हो। – unwind

3

n के (1..16 से मीटर या 32) एम-वें बिट प्रिंट करने के लिए:

void print_bit(n, m) 
{ 
    printf("%d", n & (1 << (m - 1))); 
} 

अगर आपके बिट काउंटर 0.

+0

वह काफी काम नहीं करेगा। आप जिस बिट को चाहते हैं उसे मास्क कर रहे हैं, लेकिन आप उस बिट को जगह में छोड़ रहे हैं, इसलिए आपको 1 या 0 नहीं मिलेगा। उस बिट के लिए हमेशा 1 या 0 प्राप्त करने के लिए आपको वैरिएबल दाएं स्थानांतरित करने की आवश्यकता होगी, बदलाव नहीं मास्क छोड़ दिया। – Herms

+0

ठीक है, याद किया, धन्यवाद। – Keltia

+1

आपके फ़ंक्शन में क्या बिट है? और "एन" का उपयोग नहीं किया जाता है। क्या आपका मतलब है printf ("% d", क्या n & (1 << (एम? - 1)) – Koshmaar

9

पर शुरू होता है आप की जरूरत है - 1 बिट निकालें Herms की तुलना में अधिक सामान्यीकरण करने के लिए, आप ऐसा कर सकता है:

#define IsBitSet(val, bit) ((val) & (1 << (bit))) 

/* ... your code ... */ 

printf ("%c", IsBitSet(bit, 0) ? '1' : '0'); 

printf Herms जवाब के बराबर है के रूप में है।

आप सी में bitfield के बारे में बात कर रहे हैं, तो आप ऐसा कर सकते हैं:

struct foo { int b:1; } myFoo; 

printf("%c", myFoo.b ? '1' : '0'); 
+0

वहाँ मैक्रो परिभाषा के अंत में एक लापता समापन कोष्ठक, कोई – bortzmeyer

+0

अच्छा पकड़ है - यह तय – plinth

+1

यह लगता है। थोड़ा राउंडअबाउट -। क्यों नहीं '((वैल) >> (बिट)) और 0x1' ताकि आप त्रिगुट के बजाय एक पूर्णांक के रूप में यह मुद्रित कर सकते हैं –

1

सी ++ जवाब C89 एक की तुलना में आसान है, देशी bool प्रकार के साथ:

_Bool b = 1; 
printf("%d", b); 
+0

bools आकार आम तौर पर एक बिट नहीं हैं –

1

आप "संघ" का उपयोग कर सकते हैं::

bool b = true; 
std::cout << b; 

C99 काफी समान है

union bitshow { 
    unsigned bit1:1; 
    int i; 
}; 

int main() { 
    union bitshow bit; 
    cin >> bit.i; 
    cout << bit.bit1; 
    return 0; 
} 
+3

चाहेंगे सबसे महत्वपूर्ण प्रिंट कि थोड़ा, कम से कम महत्वपूर्ण बिट, या कुछ और? आप नहीं जानते, क्योंकि यह पोर्टेबल नहीं है। – interjay

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