2010-03-19 14 views
5

मानते हुए बिट्स Iterating बिट्स मेरे पास चार "सी" है जिसका ascii कोड 0110 0111 है। मैं अपने बिट्स पर कैसे पुन: प्रयास कर सकता हूं? मैं इन 1 और 0 के से वेक्टर बनाना चाहता हूं ....एक char

उत्तर

11

आप उन्हें आसानी से बिटवाइज़ ऑपरेटर्स का उपयोग करने पर पुनरावृति कर सकते हैं:

char c = 'C'; 
for (int i = 0; i < 8; ++i) 
{ 
    // extract the i-th bit 
    int b = ((c & 1<<i) >> i); 
    // b will be 1 if i-th bit is set, 0 otherwise 

    // do whatever you want with b 
} 

आप इसे अनुकूलित कर सकते हैं (जैसा कि टिप्पणी में सुझाव दिया):

int b = ((c >> i) & 1); 
+2

मैं साथ जाऊंगा (सी >> i) और 1 – Jimmy

+1

गीज़, दोस्तों, जब प्रश्न होमवर्क की तरह ही दिखता है, कोड न दें ... सही दिशा में बस एक झुकाव! –

+1

ओपी की प्रोफाइल से पकड़ा गया, यह काफी स्पष्ट है कि वह छात्र नहीं है। –

2

एक वर्ण में एक पूर्णांक मान है। कुछ इस तरह काम करेगा:

int myChar = 42; 
String binstr = Integer.toBinaryString(myChar); 

बाकी मैं एक व्यायाम के रूप में आप के लिए छोड़ देंगे - लेकिन तुम सब अब क्या करना है अपने बाइनरी मान की स्ट्रिंग प्रतिनिधित्व पर पुनरावृति है और जो कुछ भी यह है कि आप की योजना बनाई थी करना करने पर

+1

बिटवाइज़ आपरेशन तेजी से और शायद बेहतर जवाब कर रहे हैं। उपर्युक्त समाधान शायद पढ़ने के लिए आसान है। –

2

बस प्रत्येक स्थिति में आप के बारे में परवाह पर बिटवाइज़ चेकों का उपयोग करें। निम्नलिखित की तरह कुछ एरे bits बनाएगा जो व्यक्तिगत मान रखता है।

char c = 'C'; 
int[] bits = new int[8]; 

int j = 0; 
for(int i = 1; i <= 256; i *= 2){ 
    bits[j++] = (c & i) > 0 ? 1 : 0; 
} 
+0

"i * = 2" को "i << 1" में बदला जा सकता है, मुझे आश्चर्य है? –

+1

@ जेफ, यकीन है, लेकिन जैसा कि यह खड़ा है यह एक सभ्य, सही और पठनीय उत्तर है। इस तरह के लटकन को एक डाउनवोट योग्यता नहीं चाहिए। –

+0

मैंने वोट नीचे नहीं दिया। असल में मैंने वोट दिया और आपके एक अनियंत्रित संस्करण को प्रस्तुत किया। पीपीएल को वोटों को समझाना चाहिए। –

0

आप बिटवाइज़ संचालन के साथ ऐसा करना होगा:

अर्थात्:

while (my_char > 0) { 
    if my_char & 1 
    char_vector.push 1 // if the right most bit is 1 
    else 
    char_vector.push 0 // right most bit must be 0 if we fell through to the else 
    my_char = my_char >> 1 // right shift one position 
} 

यदि आप के बाद आप सही पारी, आप पैड शेष 0s साथ char_vector कर सकते हैं, जरूरत है शून्य करने के लिए।

+0

यह मुझे जावा नहीं दिखता है: -/ –

+0

सी-जैसे छद्म कोड को क्षमा करें। ;) क्या यह समझ में नहीं आता है, या आप बस उल्लेख कर रहे हैं कि मैंने वाक्य रचनात्मक रूप से सही कोड नहीं लिखा है? (जो निश्चित रूप से, मैं इरादा नहीं था) –

0
char c = 'C'; 
Vector<Boolean> vector = new Vector<Boolean>(16); 
for (int i = Character.SIZE-1; i >=0; --i) { 
    int num = c >> i; 
    boolean set = (num & 1) == 1; 
    vector.add(Boolean.valueOf(set)); 
} 
0

unrolled पाश:

int[] bits = new int[8] 
bits[0] = (c & 1) > 0 ? 1 : 0; 
bits[1] = (c & 2) > 0 ? 1 : 0; 
bits[2] = (c & 4) > 0 ? 1 : 0; 
bits[3] = (c & 8) > 0 ? 1 : 0; 
bits[4] = (c & 16) > 0 ? 1 : 0; 
bits[5] = (c & 32) > 0 ? 1 : 0; 
bits[6] = (c & 64) > 0 ? 1 : 0; 
bits[7] = (c & 128) > 0 ? 1 : 0; 
संबंधित मुद्दे