位运算的常见及不常见操作

常见运算符

&:按位与。
|:按位或。
~:按位非。
^:按位异或。(相同为0,否则为1)
0^1=1 0^0=0 1^0=1 1^1=0
任何数和0异或值不变,和1异或二进制对应取反
<<:左位移运算符
>>:右位移运算符。
<<<:无符号右移运算符。

常见操作

1,奇偶判断 b&1:判断奇偶(1奇0偶),查二进制最低位(1 1\0 0)

2,x乘以一个2的n次方的数: x<<n

3,x除以一个2的n次方的数:x>>n

4、移位:a>>1等价于a/2
p<<1|1等价于2*p+1
5,消去x最后一位的1:x&(x-1)

6,大小写转换
C|32把大写或小写变小写;c&223把小写或大写变大写
c^32把小写变大写

7,x的异或操作:~x = -x-1

8,把x从右边数第n位变1:x|(1<<(n-1))(n从1开始)

9,把x从右边数第n位变0:x&(~(1<<(n-1)))(n从1开始)

10,求x的相反数:~ (x-1)或者~x+1

11,取x前n位的值,后面的全部置为0:x & (~((1 << (32 - n)) - 1))

12,取x最后n位的值:x&((1<<n)-1)

13、只保留x右边第一个1,其他的全部置为0:x & (-x)
或x & ~(x - 1)
14,判断x的第n位是偶数还是奇数:(x & (1 << (n - 1))) == 0

15,求x的绝对值:(n ^ (n >> 31)) - (n >> 31)
或(x >> 31) == 0 ? x : (~x + 1)
或(x + (x >> 31)) ^ (x >> 31)
用函数的话就是绝对值取整abs(x)或者绝对值不取整fabs(x)
16,求两个数的最大数:(x & ((y - x) >> 31)) | (y & (~(y - x) >> 31))

17,返回x的符号:(i >> 31) | (-i >>> 31)(正数为1,负数为-1)

18,两数相加:(x | y) + (x & y)
或(x ^ y) + ((x & y) << 1)

19,两数相减:(x & ~y) - (~x & y)

18,求两数的平均数:(x & y) + ((x ^ y) >> 1)
或(x + y) >> 1

20,判断一个数是不是2的次幂:(x != 0) && (x & (x - 1)) == 0

21,x对2的n次方求余:x & (2^n - 1)(这里的^是幂的次方)

22,判断x和y的符号是否相同:(a ^ b) >= 0

23,if(x == a) x = b; if(x == b) x = a:用异或运算符:x = a ^ b ^ x。

24、去掉最后一位1:x>>1

25、在最后加一个0:x<<1

26、在最后加一个1:(x<<1)+1或(x<<1)|1

27、把最后一位变成1:x|1

28、把最后一位变成0:(x|1)-1

29、最后一位取反:x^1
30、2的k次方:2<<(k-1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值