算法:位运算

1.基础位运算

1.1 <<左移

1.2 >>右移

1.3 ~按位取反

1.4 & 按位与:有0就是0

1.5 | 按位或:有1就是1

1.6 ^ 按位异或:相同为0,相异为1/无进位相加

2.给一个数n,确定他的二进制表示中的第x位是0还是1

约定:二进制数从右向左,是从低位到高位;且有第0位;比如:0x0000000

int n=100;

(n>>x) &1        //若是0则返回0;若是1则返回1

3.将一个数n的二进制表示的第x位修改成1,其余位不变

int n=100;

(1<<x) | n

4. 将一个数n的二进制表示的第x位修改成1,其余位不变

int n=100;

(~(1<<x)) & n

5.位图的思想

哈希的思想:是通过K-V的值产生映射,一一对应;

哈希表的思想:多数情况下是一个数组,产生下标与数组元素的映射;记录一些信息;方便我们查找;

由此推演:

位图的思想:由比特位来记录信息(用一个变量的二进制位来记录信息,比如int)

int arr[5]={0};

arr[0]中存在32位;每一位可以放1或0;代表此数据存不存在;

我们提出疑问,一个int类型只能放32个?我想存64,怎么办?

答:64/32=2;

arr[1]的第0位就可以储存64;若存在则为1;如不存在则为0;

此例只是多数情况的一种案例;

6.提取一个数n,二进制表示中最右侧的1—lowbit

00110010010        //将最右侧的1提取出来->00000000010

n &(-n)        //-n将最右侧的1,左边的区域全部变成相反

7.干掉一个数n二进制表示中的最右侧的1

00110010->00110000

n&(n-1)        //n将最右侧的1,右边的区域全部变成相反

8.运算位的优先级

去他呀的优先级;能加括号加括号;反正括号()的优先级高;绝对不会出错;

9.异或^的运算规律

9.1 a^0=a;

9.2a^a=0(消消乐)

3.a^b^c=a^(b^c);/ a^b^c=a^c^b;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值