位运算基础知识

位操作有按位与(&)、或(|)、非(~)、异或(^)、左移n位(<< n)、右移n位(>> n)等操作。

java中的“>>>”运算符将用“0”填充高位,“>>”用符号位填充高位,没有“<<<”运算符。左移操作“<< ”,高位移出,空位补零。


java中对移位运算右侧的参数要做相应的取模处理,比如int类型的数1有32位,那么"1 << 35" == "1 << 3",效果相同,值为8;

在移位运算时,byte、short和char类型移位后的结果会变成int类型,

进行位操作时,不用再考虑原有类型的数值,只按位运算的规则来操作即可。


清0操作:和0”与“;

置1操作:和1“或”;

取出某位:和1”与“   或者   和0“或”;


非操作“~”:将数的所有位按位取反,“0”变为“1”,“1”变为“0”;


XOR--异或运算:

     相同为“0”,不同为“1”,也可用 [不进位加法] 来理解。

异或操作的一些特点:

x^0=x;
x^x=0;
x^(~0)=~x//~0 == 1s,表示所有位全为”1“;
x^(~x)=1s//1s表示所有位均为“1“;
异或操作满足乘法交换律和结合律:
那么,
a^a^b == a^b^a;
a^b=c可推出 a^c=b,b^c=a//swap


移位操作:

移位操作可看做乘以/除以2的幂。
在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。 

1.将 x 最右边的n位清零:  x & (~0 << n);

2. 获取 x 的第n位的值: x & (1 << n);

3.将 x 第n位置为 1 : x | (1 << n);

4.将 x 第n位清 0 : x & ( ~(1<< n) );

5.将 x 的最高位至第 n 位 (含)清零:x& ( (1<<n)  - 1 );

6.将 x 的第 n 位至第 0 位 (含)清零:x&( (~(1<<(n+1)  - 1) );

8.将 x 第n位更新为写入值v(v取0或1): mask=v<<n ;  x&(~(1<<n)) | mask;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值