国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 互联网 > 【基础算法】位运算-基本运算

【基础算法】位运算-基本运算

来源:程序员人生   发布时间:2014-11-04 09:05:56 阅读次数:2261次

上1篇中我们分析了位的定义,这1篇中我们分析1下位的基本运算

1. 移动

左移n位:乘以2的n次方

右移n位:除以2的n次方

(~0)左移n位:在1后面加上n个0 (注:~0不等于1,等于11…11)

x&(~0<<n):将最右侧的n位清零

正数左移右侧补0

正数右移左侧补0

负数左移右侧补1

负数右移左侧补1


移动的作用总结:乘2,除2,右n位清零


2. 异或

x^0=x

x^x=0

x^1=~x

x^~x=1


异或的作用总结:取数,清零,取非,清1


3. 且运算

x&0=0

x&1=x

x&x=x


且运算的作用总结:位清零,位取数,取数


4. 或运算

x|0=x

x|1=1

x|x=x


或运算的作用总结:位清1,取数。


5. 取位

先把1左移i位

再把num与i做“与运算”

如果是0返回0,否则返回1

public static int getBit(int num, int i) { i = (1 << i); num = num & i; if (num == 0) return 0; return 1; }
也能够直接把这个数右移i位后和1做与运算

public static int getBit2(int num, int i) { return (num>>i)&1; }

6. 设位

设置第i位的方法:X|00000010 (i=1)

public static int setBit(int num, int i) { i = 1 << i; return num | i; }


7. 清位

把第i位清0的方法

public static int clearBit(int num, int i) { i = 1 << i; i = ~i; num = num & i; return num; }

把最左侧位到i位都清0的方法

public static int clearBitLtoI(int num, int i) { i = 1 << i + 1; i = i - 1; num = num & i; return num; }

把第i位到第1位都清0的方法

public static int clearBitItoR(int num, int i) { i = 1 << i + 1; i = i - 1; i = ~i; num = num & i; return num; }

8. 更新位

步骤:清位+设位

public static int updateBit(int num, int i, int w) { int temp = ~(1 << i); num = num & temp; w = w << i; num = num | w; return num; }

以上8种基本运算非常重要,每位想要掌握位运算的朋友,上面的基本运算都需要非常熟练的掌握


生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生