2012-04-24 47 views
0

我有一個10位的二進制字符串,我必須在每次循環中按位循環移位。我很困惑,失去了。它可以輕鬆做到這一點背後的邏輯是什麼?如果它是一個十六進制數,我們可以通過num >> 1或num < < 1來完成,但是在應用按位移之前,應該將像「1010101010」這樣的字符串轉換爲十六進制。我必須循環使用10次按位移。如何按位移動java中的二進制字符串?

+4

應用循環移位到長度爲10的二進制字符串10次是空操作... – 2012-04-24 22:01:40

+0

這是一個作業問題嗎? (如果是的話,那很好,你應該把它標記爲一個) – JRaymond 2012-04-24 22:02:04

+0

根本不是......我正在處理一些操作,並且我熱衷於編寫邏輯.. – volatNumbers 2012-04-24 22:03:39

回答

1

一般來說,如果你想做數字操作,最好在數字上做。所以我會建議轉換你的字符串int(或其他)它實際上代表。然後,您可以進行位移,然後在需要時返回字符串。

如果你只是想做文本操作,那麼你可以使用一個StringBuffer並與角色一起玩。

StringBuffer s = new StringBuffer("1010101010"); 
for(int i=0; i<10; i++) { 
    char c = s.charAt(0); 
    s.append(c); 
    s.deleteCharAt(0); 
} 
String result = s.toString(); 

但是,這只是醜陋的,如果你只是試圖做數學

2

有在Integer類方法轉換到/從二進制字符串。

int i = Integer.parseInt("1010101010", 2); 
    String shiftedi = Integer.toBinaryString(i<<1); 

編輯,上面是不是圓的,雖然,但你可以使用簡單的字符串操作:

String in = "1010101010"; 
String shifted1 = in.substring(1)+in.substring(0,1); 
0
int bits = Integer.parseInt ("010101010", 2); 

將改造成字符串一個int。 「在應用按位移之前轉換爲十六進制」是無稽之談 - 對不起。十六進制只是一種表示int的方式(例如)。你移動整型值,而不是表示。

1

假設你正在處理的String包含零和1(又名「二進制串」),按位移是很容易的。

要「左移」,在每個「左移」的右端添加一個「0」字符。

爲了「向右移動」,事情有點複雜。假設你總是用二進制來處理一個「正數」,爲每個「右移」移除右端的一個字符。如果你希望做一個「符號擴展右移」,那麼你需要檢查字符串的長度,看看它是否是二進制補碼形式的二進制值的特定編碼的「最大長度」,那麼你需要刪除最右邊的字符,並且可選地在左邊添加「1」字符,前提是最左邊的字符已經是「1」。

現在,由於字符串長度不受限(而字和雙字)並不清楚一個>>>操作是否有意義爲二進制字符串,或者即使2的負數的補碼錶示對於二進制字符串是有意義的,除非對字符串中有效字符的數量施加「限制」。如果您想在兩個二進制字符串之間進行任何類型的二進制數學運算,那麼對於兩個二進制字符串(或者對較小字符串有促銷規則),該限制必須相同。

另一種選擇是隻將字符串轉換爲整數並對整數使用二進制運算。

相關問題