位运算总结(C语言介绍)

位运算

最近做LeetCode上面的题,好多都要进行位运算的操作,而且执行效率快的有点难以置信,所以,对此将位运算进行一次大总结

  • 1.“按位与”运算符(&);
    指的是参与运算的2个数,按二进制位进行“与”运算。如果相应的二进制数都位1,结果为1,否则为0;

00000011
&00000101
00000001(结果)
由此可知3&5=1;

  • 2.“按位或”运算符(|)
    2个相应二进制数进行“或”运算,只要有1个数为1,则结果为1;

  • 3.“异或”运算符(^)
    若2个二进制数相同,结果为0,反之为1;

0^1=1;
0^0=0;
1^1=0;

  • 4."取反”运算符(~)
    一元运算符,求整数的二进制反码;

~77=8;

***example***
//计算m^n;
#int pow(int m,int n){  // 比较有局限性,但是运用位运算;
	int sum=1;
	
	while(n!=0){
		if(n &1==1){
			sum*=m;
		}
		m*=m;
		n=n>>1;
	}
	return sum;
} 

//LeetCode 50.   (适合任意x^n)
double myPow(double x, int n){
    if(n==0) return 1;
   if(n<0) return 1/(x*myPow(x,-(n+1)));
   if(n%2==0) return myPow(x*x,n/2);
   else return x*myPow(x*x,(n-1)/2);
}

// 有一个整形数组,只有1个数出现了1次,其余都出现了2次,找出这个出现一次的数
int find(int a[],int aSize){
	int t=a[0];
	for(int i=1;i<aSize;i++){
		t=t^a[i];
	}
	return t;
}

//交换2个数
int change(int *x,int *y){
	*x=*x ^ *y;
	*y=*x ^ *y;
	*x=*x ^ *y;
}

`//`判断奇偶性

if(n&1==1){
	n为奇数;
}`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ac1011_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值