蓝桥杯算法备战(一)——位运算

本文介绍了位运算的基础知识,包括与(&)、或(|)、异或(^)和非(~)操作,以及左移(<<)、右移(>>)。文章通过实例讲解了如何利用位运算解决问题,如判断奇偶性、消除重复元素和计算二进制中1的个数。此外,还提供了三道与位运算相关的习题,包括找数组中两个唯一数字、计算转换位数以及地产抽奖问题的解决方案。
摘要由CSDN通过智能技术生成

一.相关符号

&(与)、|(或)、^(异或,二者不同则为1,可以理解为不进位的加法)、~(非,取反)

<<(左移,用符号位填充高位) >>(右移,无>>>) >>>(左移,用0填充高位)

注:对于Int类型数据<<35和<<3是一样的,因为Int类型只有32位(同理,long型超过64就是等价的)

二.相关技巧

1.判断x奇偶数:用x和1进行与运算,x&1结果是1,是奇数;若为0,则是偶数。

2.连续异或^可以消除重复:上面提到两者相同,异或为0,而a^0=a,那,那么多个数进行异或运算时

例如:a^a^b^c^c=b

3.计算十进制转二进制后1的个数的三种方法:

(1)a[i] = x&1;  x>>=1;  把二进制的每一位存放在数组a中,再用一个for循环判断数组里1的个数

(2)思路和第一个方法一样,只不过移动的是1,进行判断

(3)while (x!=0) { x= (x-1)&x; count++; } x-1和x进行与运算,进行几次就有几个1,最后x变成0,代码简洁。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值