位运算的知识点

位运算的知识点

1.位运算概述:

我们知道,计算机中的数在内存中都是以二进制形式存储的,而位运算就是直接对整数在内存中的二进制位进行操作,因此其执行效率非常高。
涉及位运算的运算符如下:

2.运算符的优先级

运算符结合方向
~(取反运算符),++(自增),–(自减)从右往左
*(乘),/(除),%(取余)从左往右
<<(左移),>>(右移)从左往右
大于(>),小于(<),大于等于,小于等于从左往右
等于(==),不等于(!=)从左往右
&(与)从左往右
^(异或)从左往右
从左往右

3.位运算符的运算律

在这里插入图片描述

4.位运算的高级操作

在这里插入图片描述

5.lowbit函数

lowbit(x)=x&(-x),返回的是x地最后一个1及其后面的所有的0。
例如:a=11000,则lowbit(a)=1000。

6.位运算的一些应用

1.位运算实现乘除法

a<<1等价于a*2;//将x左移一位实现*2
 a>>1等价于a/2;//将x右移一位实现/2 

2**.位运算交换两个整数**

void swap(int &a,int &b)
{
	a^=b;
	b^=a;
	a^=b;
}

我们来剖析一下它的原理:

/*对于a=a^b,则b=b^(a^b),根据交换律以及异或性质,得
b=b^b^a=0^a=a;同理a=(a^b)^a=0^b=b,这样就实现了交换操作 

3.位运算判断奇偶数
我们知道,在二进制中,最低为决定了是奇数还是偶数,所以我们可以提取出最低位的值,即与1相与,结果为0则是偶数,为1则是奇数

4.位运算统计二进制数1的个数

法一:

 int res=0;
        for(int i=0;i<32;i++)//一个数变为二进制,最多是32位,所以循环32次
        {
            if(n>>i&1)//判断一个数变为二进制后的每一位是否为1,1&1为1 
            res++;
        }

法二:

 int res=0;
       //lowbit写法
       while(n) n-=n&-n,res++;//n&-n会返回最后一个为1的二进制,然后用n把1减去,减几次就说明有几个1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值