概述
位运算符:
&:按位与。例: 111 & 010 = 010
|:按位或。例: 111 | 010 = 111
~:按位非。例: ~010 = 101
^:按位异或。例:111 | 010 = 101
<<:左位移运算符。例:111 << 1 = 110; 111 << 2 = 100
>>:右位移运算符。例:111 >> 1 = 011;111 >> 2 = 001
应用:
1、一个数乘以2的n次方:m * 2 ^ n <=> m << n
例:3 * 2 ^ 2 = 12 <=> 3 << 2 = 12
详解:3的二进制:11;左移两位后:1100,及为12
2、一个数除以2的n次方:m / (2 ^ n) <=> m >> n
例:12 / ( 2 ^ 2 ) = 3 <=> 12 >> 2 = 3
解析:12的二进制:1100;右移两位后:0011,及为3
3、判断一个数的奇偶性:n & 1 == 1 ? ”奇数” : ”偶数”;
例:3 & 1 <=> 11 & 01 = 1;
4 & 1 <=> 100 & 001 = 0;
解析:奇数的二进制末尾数必为1,所以按位与 1 的时候结果为 1;
偶数的二进制末尾数必为0,所以按位与 1 的时候结果为 0;
4、两数交换:x ^= y; y ^= x; x ^= y;
例:int x = 1;
int y = 2;
x = x ^ y; (1)
y = y ^ x; (2)
x = x ^ y; (3)
==> x = 2; y = 1;
解析:
将上面步骤合一下:
y = y ^ (x ^ y) <=> y ^ x ^ y <=> y ^ y ^ x <=> 0 ^ x => x ; 此时就将 x 变量的值赋值给 y 变量了
x = (x ^ y)^ x <=> x ^ y ^ x <=> x ^ x ^ y <=> 0 ^ y => y;此时就将 y 变量的值赋值给 x 变量了
4、取绝对值:(1) 、(x ^ (x >> 31)) - (x >> 31) (2)、(x + (x >> 31)) ^ (x >> 31)
5、两整数相加:
public int sub(int a, int b) {
if (0 == b) return a;
int sum = a ^ b;
// 不计进位的和
int carry = a & b;
// 进位
carry <<= 1;
return sub(sum, carry);
}
最后
以上就是迷路发夹为你收集整理的位运算简要应用的全部内容,希望文章能够帮你解决位运算简要应用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复