文章目录

  • 一. 概念定义
    • 1.1 位或定义
    • 1.2 位与定义
  • 二. 推荐专栏
  • 三. 相关练习
    • 3.1 根据数字二进制下 1 的数目排序
    • 3.2 二进制表示中质数个计算置位
    • 3.3 2 的幂

一. 概念定义

1.1 位或定义

  按位或 |:是对二进制进行比较,对两个数的二进制的每一位进行,判断方式和 逻辑或 || 一样,一个1 | 1,1 | 0 都为1,0 | 0为0。

例如:
2 | 3;
010 (2的二进制)
011 (3的二进制)
011 (结果)

1.2 位与定义

  按位与 &:按位与也是进行一个二进制的比较,它的比较形式则与 | 相反,0 & 0 和 0 & 1 都为0,1 & 1 为 1。

例如:
2 | 3;
010
011
010

二. 推荐专栏

《算法零基础100讲》(第44讲) 位运算 (位或) 入门

三. 相关练习

3.1 根据数字二进制下 1 的数目排序

题目链接:
根据数字二进制下 1 的数目排序

思路分析:

我们可以定义一个数组bit用于记录arr每个数二进制形式1的个数,如何根据bit对arr进行排序。

代码如下:

int* bit;int get(int n){int cnt = 0;while(n){cnt += (n % 2);n /= 2;}return cnt;
}int cmp(const void* a, const void* b){int x = *(int*)a;int y = *(int*)b;return bit[x] == bit[y] ? x - y : bit[x] - bit[y];
}int* sortByBits(int* arr, int arrSize, int* returnSize){bit = (int*)malloc(sizeof(int) * 10001);memset(bit, 0, sizeof(bit));for(int i = 0; i < arrSize; i++){bit[arr[i]] = get(arr[i]);}qsort(arr, arrSize, sizeof(int), cmp);*returnSize = arrSize;return arr;
}

3.2 二进制表示中质数个计算置位

题目链接:

762. 二进制表示中质数个计算置位

思路分析:

我们对区间 [left,right] 进行遍历,对该区间内的每个数的二进制形式1的个数进行判断,如果为质数,则++,统计所有1的个数为质数的数量。

代码如下:

bool judge(int n){if(n < 2)return false;for(int i = 2; i * i <= n; i++){if(n % i == 0)return false;}return true;
}int countPrimeSetBits(int left, int right){int ans = 0;for(int i = left; i <= right; i++){int cnt = 0;int kk = i;while(kk){kk = kk & (kk - 1);//计算1的个数cnt++;}if(judge(cnt)){ans++;}}return ans;
}

3.3 2 的幂

题目链接:
231. 2 的幂

思路分析:

通过循环计算2的幂,幂是多少就循环多少次。

代码如下:

bool isPowerOfTwo(int n){if(n == 1){return true;}long long t = 2;while(t != n){t *= 2;if(t > n){return false;}}return true;
}

【题解】《算法零基础100讲》(第44讲) 位运算 (位或) 入门相关推荐

  1. 《算法零基础100讲》(第30讲) 概率与统计

    文章目录 零.写在前面 一.概念定义 二.题目描述 三.算法详解 四.源码剖析 五.推荐专栏 六.习题练习 零.写在前面   这是<算法零基础100讲> 专栏打卡学习的第 30 天了.如果 ...

  2. 《算法零基础100讲》(第42讲) 位运算 (位与) 入门

    文章目录 零.写在前面 一.概念定义 1.位与的定义 2.位与运算符的简单应用 1)奇偶性判定 2)取末五位 3)消除末尾五位 4)2的幂判定 二.题目描述 三.算法详解 四.源码剖析 五.推荐专栏 ...

  3. 【习题】《算法零基础100讲》位与 2

    前言 原文链接:<算法零基础100讲>(第43讲) 位运算 (位与) 进阶 习题 难度 习题 中等 397. 整数替换 中等 1404. 将二进制表示减到 1 的步骤数 中等 201. 数 ...

  4. 《算法零基础100讲》(第20讲) 进制转换(二) - 进阶

    文章目录 零.写在前面 一.概念定义 二.题目描述 三.算法详解 四.源码剖析 五.推荐专栏 六.习题练习 零.写在前面   这是<算法零基础100讲> 专栏打卡学习的第 20 天了.如果 ...

  5. 《算法零基础100讲》(第2讲) 数列

    文章目录 零.写在前面 一.概念定义 1.等差数列 2.等比数列 3.斐波那契数列 二.题目描述 三.算法详解 四.源码剖析 五.推荐专栏 六.习题练习 零.写在前面   这是<算法零基础100 ...

  6. 《算法零基础100讲》(第53讲) 区间问题(二) 区间的并集和交集

    文章目录 零.写在前面 一.概念定义 1.区间的相交判定 2.区间的交集 3.区间的并集 二.题目描述 三.算法详解 四.源码剖析 五.推荐专栏 六.习题练习 零.写在前面   这是<算法零基础 ...

  7. 《算法零基础100讲》(第11讲) 因子数

    文章目录 零.写在前面 一.概念定义 二.题目描述 三.算法详解 四.源码剖析 五.推荐专栏 六.习题练习 零.写在前面   这是<算法零基础100讲> 专栏打卡学习的第 11 天了.如果 ...

  8. 《算法零基础100讲》(第58讲) 前缀和(二) 线性前缀和变形

    文章目录 零.写在前面 一.概念定义 1.前缀积 2.前缀异或和 二.题目描述 1.定义 2.求解 三.算法详解 四.源码剖析 五.推荐专栏 六.习题练习 零.写在前面   这是<算法零基础10 ...

  9. 《算法零基础100讲》(第57讲) 前缀和(一) 线性前缀和入门

    文章目录 零.写在前面 一.概念定义 1.部分和 2.朴素做法 3.前缀和 4.前缀和的边界值 5.边界处理 6.再看部分和 二.题目描述 1.定义 2.求解 三.算法详解 四.源码剖析 五.推荐专栏 ...

最新文章

  1. python输入正整数n、求n以内能被17整除的最大正整数_求100之内自然数中最大的能被17整除的数...
  2. 操作系统内核(linux)
  3. 病毒在网络上传播的基本途径分析
  4. 做产品16年总结9条心得
  5. linux nfs服务器详解
  6. Hotspot GC Root 对应调用链
  7. python下保持mysql连接,避免“MySQL server has gone away“方法
  8. 简述DNS进行域名解析的原理
  9. 数位DP入门题 hdu 2089 hdu 3555
  10. java高级工程师简历模板,MySQL+Tomcat+JVM,看完还怕面试官
  11. 看图纸V3.2.1正式版[看图纸正式版下载]
  12. Centos7安装WPS
  13. 《南风窗》长篇报道:仇恨引爆悲剧
  14. 信度spss怎么做_毕业季:毕业论文利用spss做信度分析步骤详解
  15. 中美大学生阅读书单公布:对比结果惊到你了吗?
  16. linux虚拟机释放内存cache
  17. CentOS利用WebHook实现PHP自动部署Git代码
  18. ios13.5.1降级_升级iOS 14尝鲜后 无法降级iOS13.5.1?
  19. 教师评计算机课缺点及建议,评课用语优缺点及建议
  20. Word太大怎么进行压缩?实用Word压缩工具

热门文章

  1. 微信收发邮件的个人邮箱怎么注册,VIP个人邮箱怎么注册申请?
  2. 2022年全球市场紧急出口装置总体规模、主要生产商、主要地区、产品和应用细分研究报告
  3. python 新年祝福,python 新年祝福,,import osi
  4. OpenGL 体积光 光柱实现代码解读教程
  5. 【海康威视】前端开发:【4】Chrome谷歌浏览器 Web Components Kit 插件支持
  6. 记录一个有意思的cpu逻辑cpu核数问题(已解决)
  7. Spring cloud使用ELK配置与使用详解之elasticsearch
  8. python 下三角矩阵_Python | 矩阵的上三角
  9. 6-1 求二叉树高度
  10. oracle如何导入用户数据库,oracle数据库创建用户导入导出详解