highestOneBit 演算法解析

2021-08-02 15:27:15 字數 793 閱讀 5299

integer類有個highestonebit()方法,作用是返回具有單個 1 位的 int 值, 在指定值中最高位的 1 位的位置,比如5(00000101)返回4(00000100)。

highestonebit()的演算法如下:

public

static

inthighestonebit(int i)

為了書寫簡單,以乙個位元組為例,最高位表示符號位,以引數為5為例解釋演算法:

第一步:i |= (i >> 1)使i出現1的最高位至多連續2位都為1(包括最高位)

0000 0101 >>1 = 0000 0010

0000 0101 | 0000 0010 = 0000 0111

第二步:i |= (i >> 2),使i出現1的最高位的至多連續4位都為1(包括最高位)

0000 0111 >>2 = 0000 0001

0000 0111 | 0000 0001 =0000 0111

第三步:i |= (i >> 4),使i出現1的最高位的至多連續8位都為1(包括最高位)

0000 0111 >>4 =0000 0000

0000 0111 | 0000 0000 =0000 0111

第四步:i - (i >>> 1),減掉最高位後面的1

0000 0111 >>>1 =0000 0011

0000 0111 - 0000 0011 = 0000 0100

對於引數為0或負數的情況推導過程也是類似的。對於負數來說,最後一步的減法要換成補碼進行計算。

演算法基礎( 演算法)

演算法基礎 演算法 hash演算法有兩種,即sha 1和md5演算法這裡先介紹md5演算法.md5產生乙個128位的hash值,在經過一寫初始樹立後,將明文分成了512位的塊,再將每一塊分成16個32位的子塊。演算法的輸出是4個32位的塊,連線起來構成128位的hash值。首先,將訊息填充到比512...

演算法 分治演算法

分治策略主要利用遞迴來解決問題,它包括以下三個步驟 分解 將問題分解為一與原問題類似並且比原問題規模更小的子問題 解決 當分解的子問題足夠小時,直接給出答案,否則用遞迴打方式求解 合併 將子問題的解合成原問題的解 下面考慮乙個簡單的利用分治演算法的歸併排序的例子 問題的形式化描述如下 輸入 a是 乙...

演算法 遞迴演算法

遞迴演算法的概念,就是通過不斷地呼叫自身,最終達到解決問題的目的。遞迴有兩個點需要注意 1.要不斷的呼叫自身 2.這個遞迴要有出口,不能成為死迴圈 看下面的例子。很多介紹遞迴演算法的,都會用遞迴來做乙個題目 計算乙個數的階層。例如 計算5的階層,5 5 x 4 x 3 x 2 x 1 用遞迴來實現 ...