位运算知识点总结

位运算知识点

按位与(&)

如果x的二进制的第 i 位是1,并且y的二进制第 i 位也是1,那么(x&y)的二进制的第 i 位=1
列如

0101 1010
&1000 1100
0000 1000

否则的话(x&y)的二进制的第 i 位=0

按位或(|) 的逻辑和 按位与(&) 基本相同

左移 <<

x 中所有的二进制位向左移动 j 个位置,而右边填入0
所有小于int的类型,移位以 int 的方式来做,结果是 int
x <<= 1等价于x *= 2
x <<= n等价于x *= 2^n

右移 >>

x中所有的位向右移动 j 个位置
所有小于 int 的类型,移位以 int 的方式来做,结果是 int
x >>= 1等价于x /= 2
x >>= n等价于x /= 2^n

———————————————————————————————————————————————————————

使用位运算求出数字的二进制

以前求数字的二进制都要使用数组保存当前位的二进制数字,然后用循环倒叙输出
现在可以用位运算快速求出数字的二进制

#include"bits/stdc++.h"
using namespace std;
int main(){
	int number;
	while(~scanf("%d",&number)){
		unsigned int mask =1<<31;//一定要unsigned。因为int用移位操作会保留左边最高位的数 
		int flag=0;
		for(;mask;mask>>=1){
//		  相当于用10000...000
//		  		  01000...000
//		  		  00100...000
//		  		  00010...000逐位与number的二进制数做&运算 
			if((number&mask?1:0)==1)//判断number的二进制的各个位是0还是1 
				flag=1;//判断二进制数的第一个1是否已出现 
			if(flag==1)//如果二进制数的第一个1已出现,输出后面的数 
				printf("%d",number&mask?1:0);
		}
	printf("\n");
	}
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值