2013-11-27 61 views
0
 int x = 58; 
     int i = 0; 
     while (i < 8) { 
      int b = ((x >> 1) & 1); 
      System.out.print(b); 
      x = x >> 1; 
      i++; 

     } 

輸出爲10111000 自58最後8位應該是:00111010 Should'nt輸出是01011100簡單的Java的位操作意外的輸出

我知道我錯過了一些明顯的東西,任何幫助表示讚賞。

回答

4

在讀取它之前,您正在移動第一位,因此結果。更改爲:

int b = x&1; 

並保留剩餘的代碼。

+0

+1邑,這是問題 –

+0

明白了,謝謝你,給我5分鐘接受的答案... – Zohaib

+0

你會得到答案是相反的。 – anon

1

在輸出任何內容之前,您已經開始移位了。

int x = 58; 
    int i = 0; 
    while (i < 8) { 
     int b = (x & 1); 
     System.out.print(b); 
     x = x >> 1; 
     i++; 

    } 

應該正常工作。

1

您可以按照相反的順序獲得二進制表示x並且無需第一位。您應該編寫int b = x & 1;而不是int b = ((x >> 1) & 1);並將位存儲在數組中,然後以相反的順序輸出存儲的位。或者只是簡單地使用Integer.toString(x, 2)

0

你不讀的最後8位,如你跳過最後一點,由於這條線:

int b = ((x >> 1) & 1); 

而應是:

int b = x & 1; 
1

58 = 111010

01110(1) & 1 = 1 
00111(0) & 1 = 0 
00011(1) & 1 = 1 
00001(1) & 1 = 1 
00000(1) & 1 = 1 
00000(0) & 1 = 0 
00000(0) & 1 = 0 
00000(0) & 1 = 0 

這正是10111000

0

用它替換上面的代碼。並反向打印數組。

int x = 58; 

     int i = 0; 
     int[] arr = new int[8]; 
     while (i < 8) { 
      arr[i]=x&1; 
      x = x >> 1; 
      i++; 
     }