您的位置:首页 > 编程语言 > Java开发

java 位运算常用技巧

2016-07-14 15:23 435 查看
(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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息