2017-04-02 70 views
-1

這個程序是關於binary addition在Java中:在瞭解這一計劃瞭解二進制加法程序

public static String binaryAddition(String s1, String s2) { 
    if (s1 == null || s2 == null) return ""; 
    int first = s1.length() - 1; 
    int second = s2.length() - 1; 
    StringBuilder sb = new StringBuilder(); 
    int carry = 0; 
    while (first >= 0 || second >= 0) { 
     int sum = carry; 
     if (first >= 0) { 
      sum += s1.charAt(first) - '0'; 
      first--; 
     } 
     if (second >= 0) { 
      sum += s2.charAt(second) - '0'; 
      second--; 
     } 
     carry = sum >> 1; 
     sum = sum & 1; 
     sb.append(sum == 0 ? '0' : '1'); 
    } 
    if (carry > 0) 
     sb.append('1'); 

    sb.reverse(); 
    return String.valueOf(sb); 
} 

我有困難。

爲什麼我們必須在這裏用0減去?

sum += s1.charAt(first) - '0'; 

用的是什麼>>運營商和運營商&這裏:

 carry = sum >> 1; 
     sum = sum & 1; 
     sb.append(sum == 0 ? '0' : '1'); 

能否請你幫我理解這個計劃。

回答

0

爲什麼我們在這裏必須減去0?

sum += s1.charAt(first) - '0'; 

即轉換字符'0''1'於號碼01

用的是什麼>>運營商和運營商&這裏:

>>被移位一位到右邊,和&是從最右邊一個除了屏蔽掉所有位。

我可以推薦您查找並閱讀關於按位操作如何在Java中工作的教程。這是非常基本的東西。一旦你瞭解了基本知識,那麼你應該能夠閱讀和理解代碼,就像你告訴我們的代碼一樣。

+0

謝謝,你能解釋一下如何>>和&在解決二進制添加到這裏。我理解操作員的工作原理,但不清楚這是如何解決這個附加程序的。 – user3181365

+0

很顯然,這兩個陳述是搞清楚進位是什麼。你讀過關於二進制加法如何工作的任何內容嗎https://en.wikipedia.org/wiki/Binary_number#Addition –