位运算与位运算的常见用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iov3Rain/article/details/82859885

一 & 与运算

当都为1时,才为1

1.保留指定位置

int a=0x0111;
int b=0x0010;
a=a&b;    //a : 0x0010 

2.判断奇数偶数

0为偶,1为计

int a=2;
int b=1;
a=a&1;// a: 0   偶数值为0 
b=a&1;//b : 1   奇数值为1

二 | 或运算

当都为0时,才为0

1.设置指定位置为0的为1

int a=0x0001;
int b=0x0010;
int c=a|b;   //c:  0x0011  

三 ^ 异或运算

相异为1,相同为0。

同一个相异结果为0

1.交换数值

a=a^b;
b=b^a;
a=a^b;

2.当有一组数,只有一个数出现次数为奇数,其他数出现次数为偶数,那么这组数所有相异或的结果就是这个奇数。

四 ~ 取反

0变1,1变0

1.变换符号

取反后加1.

int a = 1;
a = ~a + 1;//a = -1;

五 <<左移

各二进位全部左移N位,高位丢弃,低位补0。相当于 原值*2的N次

六 >>右移

各二进位全部右移N位,低位丢弃,高位补0。相当于 原值/2的N次

如果是负数,高位补1而不是0.

位运算符运算级别较低,通常加上括号。

%取余运算符

有道题目是这样的: 求 100 % 8的 优化解法。我们知道:

8刚好是2的3次方

所以 100 % 8 == 100 - math.floor(100 / 8) * 8 == 100 -  ((100 >> 3) << 3)

猜你喜欢

转载自blog.csdn.net/iov3Rain/article/details/82859885
今日推荐