1. 程式人生 > >java 位運算常用技巧

java 位運算常用技巧

(1)       m<<n:左移—m左移n位,最左邊n位丟棄,最右補n個0。

2n:相當於數左移n位;注意,除操作慎用右移,注意負數情況。

(2)       m>>n:右移—最右邊n位丟棄,最左邊0補位(無符號)/符號位補最左邊。

**利用右移對最右邊的位進行與運算,判斷數為0還是1://判斷奇數、偶數

** 0:(c&1)==0   c >>= 1;

** 1: (c&1)==1)  c >>= 1;

(3)       常見位操作:

A. 獲取某位的值:

num &(1<<i) 將1左移i位與原值相與,其他位為0,可判斷i位的值。

B. 某位的值置1:

num |(1<<i) 將1左移i位與原值相或,其他位不變, i位的值置1。

C. 某位的值清0:掩碼思想

num & ~(1<<i) 將1左移i位取反與原值相與,其他位不變, i位的值清0。

num& ( (1<<i) -1) 將最高位至i位(含)清零

num & ~( ( 1<<(i+1) -1) 將i位至0位(含)清零

D. 更新:

(num & ~(1 << i)) | (v << i)   //v為1則將num的i位更新為1,否則為0.

(4)       &與&&

A. &&邏輯與、||邏輯或的短路特性可以代替遞迴出口判斷:

boolean b = (n!=0)&&((f +=f(n-1)) > 0 );

邏輯與(&&)前-不成立時,不進行後-的計算,從而控制n==0時不再遞迴。

B. &可用作位運算子,當&操作符兩邊的表示式不是boolean型別時,&表示按位與操作,通常使用0x0f來與一個整數進行&運算,來獲取該整數的最低4個bit位。

**  檢查n是否為2的某次方(二進位制中只有一個1):((n & (n-1))==0)

**把一個整數減去1,再與原數相與,相當於把整數二進位制最右邊一個1變成0.