溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java怎么用位運算實現乘法運算

發(fā)布時間:2023-04-13 16:18:03 來源:億速云 閱讀:139 作者:iii 欄目:開發(fā)技術

這篇文章主要介紹了Java怎么用位運算實現乘法運算的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Java怎么用位運算實現乘法運算文章都會有所收獲,下面我們一起來看看吧。

十進制相乘

例如,26 * 15,在進行乘法操作時,我們一般這樣算,先用5乘以6得到30,把0寫下把3記在一邊,再用5乘以2得到10再加上之前的3寫在下面,得到130;計算完5再計算1分別乘以62把得到的結果26記在下面,然后把13026相加(有錯位)得到390

Java怎么用位運算實現乘法運算

二進制相乘

看完了十進制的相乘,再來看下二進制的相乘,基本原理是一樣的,也是以十字相乘法為例,計算 5 * 7。

5的二進制為101,7的二進制為111,來看下二進制的十字相乘法。

Java怎么用位運算實現乘法運算

可以看到二進制為101和二進制111用傳統(tǒng)的方式來計算,得到的結果為100011,而二進制100011對應的十進制為35。
所以說,在計算的過程中,十進制和二進制的計算方式是一樣的,當然這里就不進行舉例和證明了。

思路分析

既然計算過程有了,那么怎么樣用代碼來實現呢?

我們再來看下上圖中二進制的計算過程:

  • 先用二進制111的最后一位1 乘上 101 得到 101。

  • 再用二進制111的倒數第2位1 乘上 101 得到 101

  • 再用二進制111的倒數第3位1 乘上 101 得到 101。

  • 得到的三個101進行二進制相加,得到 100011。

注意,第2步和第3步得到的結果101都往前挪了一位,相當于101010100,也就是最后相加的計算為:10100 + 1010 + 101 = 100011。

再來看得到最終相加的計算10100 + 1010 + 101 = 100011,也就是只要我們找到如何把數據轉換為幾位數的相加就可以了,因為之前已經實現了如何用位運算實現加法操作。

這三個數101、101010100的數量剛好與二進制111的個數相同,也就是二進制(上圖下面那個乘數111)有幾位就會產生幾個數相加,如果是與11111相乘就會產生5個數相加。

再來看數據之前的關系:

  • 第一次相乘結果:101 = 101 + 0

  • 第二次相乘結果:1111 = 101 < 1 + 101 = 1010 + 101

  • 第三次相乘結果:100011 = 101 < 2 + 1111 = 10100 + 1010 + 101

從這里我們可以看到,每計算一次,101只需要向左移一次再加上上一次的計算結果就可以了。

那么,怎么知道要左移多少次呢?從這里例子中看,111每次計算后,向右移動一次,101也跟著向左移動一次,直到111只剩最后一位,則停止計算就好了。

代碼實現

根據上面的思路,來實現一下代碼:

// 用位運算實現加法
public static int add(int a, int b) {
    int sum = 0;
    while (b != 0) {
        sum = a ^ b;
        b = (a & b) << 1;
        a = sum;
    }
    return sum;
}

// 用位運算實現減法
public static int multi(int a, int b) {
    int res = 0;
    while (b != 0) {
        if ((b & 1) != 0) {
            res = add(res, a);
        }
        a <<= 1;
        b >>>= 1;
    }
    return res;
}

運行一下代碼,看下結果:

Java怎么用位運算實現乘法運算

可以看到計算是正確的,而且還支持負數。

關于“Java怎么用位運算實現乘法運算”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Java怎么用位運算實現乘法運算”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI