2010-03-19 32 views

回答

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

我會和(c >> i)&1 – Jimmy 2010-03-19 20:28:39

+1

Geez,夥計們,當問題看起來像作業一樣,不要給代碼......只是在正確的方向推動! – 2010-03-19 20:58:19

+1

從OP的檔案中可以看出,他很清楚他不是學生。 – 2010-03-22 20:58:37

2

一個字符有一個整數值。像這樣將工作:

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

其餘的我將離開你作爲練習 - 但你現在要做的是疊代的二進制值的字符串表示,並盡一切是你的計劃在做。

+1

的位運算速度更快,可能是更好的答案。上述解決方案可能更易於閱讀。 – 2010-03-19 20:30:51

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

我可以將「我* = 2」改爲「i << 1」嗎? – 2010-03-19 20:46:49

+1

@Jeff,當然,但現在這是一個體面的,正確的和可讀的答案。這樣的手鐲應該不值得讚揚。 – 2010-03-19 21:08:57

+0

我沒投下票。其實我投票並提交了你的展開版本。 Ppl應該解釋投票。 – 2010-03-20 02:01:49

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 
} 

,如果你需要,你可以墊用剩下的0 char_vector,你右移後歸零。

+0

這對我來說不是Java: -/ – 2010-03-19 20:31:36

+0

原諒類似c的僞代碼。 ;)它沒有意義,或者你只是提到我沒有編寫正確的語法代碼? (當然,我不打算) – 2010-03-22 20:56:43

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

展開的循環:

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;