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 用遞迴來實現 ...