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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值