位运算的概念以及相关练习

位运算:

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。
位运算符号:<<,>>,|,&,^,~

位运算的三个步骤:
1.确定要使用的符号
2.确定数
3.怎么得到这个数

位运算符号:

二元运算符:
<< :按位左移,右边补充0

:按位右移,左边补充符号位
&:按位与,对应的位置上都是1的为1,与要变0的题相关
|:按位或,对应位置上只要有一个是1的为1,与要变1的题相关
^:按位异或,对应位置上不同的为1,与取反的题相关
一元运算符:
~:取反,将所有位上的数字取反,1为0,0为1 ,与取反的题相关

位运算例题:

在这里插入图片描述
解析:两数求和,就是将两个数二进制的相同部分2加上不相同的部分,例如7+5=52+(7-5)=12,
**(a&b)取两个数的相同部分,(ab)取两个数的不同部分**,所以答案是2*(a&b)+(ab)

在这里插入图片描述

解析:反转,即第0位到第31位,第1位到第30位…所以第i位到第31-i位,(n&1)==1是判断右边第一位是否为1,m|=(1<<(31-i))是将m的第31-i为置为1,其他的位置数不变,每循环一次,n就往右移1位

在这里插入图片描述

注:
x+1相当于将从右数的第一个0变成1,这个数前面的数都变为0
x-1相当于将从右数的第一个1变成0,这个数前面的数都变为1
解析:
1.最后一位取反:1.取反要用^、2.确定数字1,即x ^ 1
2.把右数第k位变成1:1.变1用 | 、2.确定数字 00001000第k-1位要为1,即x&(1<<k-1)
3.把右数第k位变成0:1.变0用 & 、2.确定数字11110111第k-1位要为0、3.00001000取反变成11110111,即x^(~(1<<k-1))
4.右数第k位取反:1.取反用^、2.确定数字00001000第k-1位要为1,即x ^(1<<k-1)
5.取末三位:第三位前面的都变成0,1.变0用&、2.确定数字00000111、3.(1<<4)-1变成00000111,即x&((1<<4)-1)
6.取末k位:第k位前面的都变成0,1.变0用&、2.确定数字00001111前k位要为1、3.(1<<k)-1,即x&((1<<k)-1)
7.取右数第k位:将除了第k位都变成0,1.变0用&即(x>>k-1)&1
8.把右边连续的1变成0:前面的数不变,1.变0用&,即x&(x+1)
9.把右起第一个0变成1:1.变1用|,即x|(x+1)
10.把右边连续的0变成1:1.变1用|,即x|(x-1)

.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值