【基础算法】位运算

embedded/2024/10/19 2:22:19/

位运算

    • 概念
    • 位运算模板
    • 模板题

概念

在这里插入图片描述
异或(x⊕y或x ^ y)

高低位交换:https://www.luogu.com.cn/problem/P1100
题意:给定一个32 3232位整数x xx,在二进制下交换其前16 1616位与后16 1616位,输出最终的数。
答案为ans = (x >> 16) | (x << 16)
注意此处使用32 3232位无符号整数进行计算,这样x << 16会自然溢出,导致前16 1616位被丢弃,恰好满足要求。
参考:

#include <cstdio>
using namespace std;int main()
{unsigned int x;scanf("%u", &x);printf("%u\n", (x >> 16) | (x << 16));return 0;
}

位运算模板

求n的第k位数字: n >> k & 1
返回n的最后一位1lowbit(n) = n & -n

1.求n的第k位数字 : n>>k&1 (n右移k位, 然后&1)

 int n = 15; //00000000000000000000000000001111for(int i=31;i>=0;i--){System.out.print( n>>i & 1 ); //00000000000000000000000000001111}

2.返回n的最后一位1 : lowbit(n) = n & -n 这里的 -n 也就是 ~n+1(取反加一)

public static int  lowbit(int n){return n & -n;
}

lowbit(x)即为二进制下x xx的最低位,如lowbit(10010) = 10、lowbit(1) = 1。严格来说0没有lowbit,部分情况下可视为lowbit(0) = 1。利用lowbit函数可实现树状数组等数据结构。

模板题

AcWing 801. 二进制中1的个数
输入样例
5
1 2 3 4 5
输出样例
1 1 2 1 2

思路 : 使用 lowbit(n) 依次算出每个末尾1的数 然后减去后继续 lowbit

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n' 
const int N=1e5+10;
int a[N];
int b[N];int lowbit(int x)
{return x&(-x);
}signed main()
{   ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); int n;cin>>n;while(n--){int x;cin>>x;int cnt=0;while(x){x-=lowbit(x);//减去最后一个1以及后面的数(二进制) cnt++;}cout<<cnt<<" ";}
}

http://www.ppmy.cn/embedded/100093.html

相关文章

本地环境注入jupyter:无法在jupyter选择已经创建的conda环境?快来看下解决办法(jupyter notebook选择已创建环境)

1、WinR打开本机cmd命令行 2、运行 conda activate 本地已创建的环境名称 3、运行 conda install ipykernel 4、运行 python -m ipykernel install --user --name 本地环境名称 --display-name "在jupyter上显示的环境名称" 就可以在jupyter notebook中看到环…

【Latex】latex中\cdot, \cdots, \ldot,\vdot和\ddots的用法与区别

在 LaTeX 中&#xff0c;\cdot、\cdots 和 \ldots 是用于不同类型的符号&#xff0c;它们在数学排版中有不同的用途&#xff1a; \cdot&#xff1a; 用法&#xff1a;用于表示乘法运算或点积操作中的点符号。示例&#xff1a; a ⋅ b a \cdot b a⋅b 表示 a a a 乘以 b b b。位…

算法的学习笔记—二叉树中和为某一值的路径

&#x1f600;前言 在二叉树中寻找和为某一特定值的路径问题是一个经典的面试题&#xff0c;考察了对二叉树的遍历能力以及递归和回溯算法的理解和应用。本文将详细解析这一问题&#xff0c;并提供一个Java实现。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 &#x1…

编程小白到大神之路

编程已成为现代大学生必不可少的技能之一 一、编程的基本概念 编程是将特定算法或逻辑转换为计算机可以理解的语言&#xff0c;通过指令控制计算机实现某种功能。掌握编程不仅能提升逻辑思维能力&#xff0c;还有助于解决实际问题。 二、主要特点 逻辑性强&#xff1a;编程需…

Python爬虫-实现自动获取随机请求头User-Agent

前言 本文是该专栏的第36篇,后面会持续分享python爬虫干货知识,记得关注。 在爬虫项目中,User-Agent 字符串扮演着非常关键的角色。User-Agent 是一个特殊的 HTTP 请求头字段,由客户端(在这种情况下,主要是爬虫或浏览器)发送到服务器,以告诉服务器关于客户端(如浏览器…

CSS+JS实现一个鼠标移动的高亮边框效果

一、过程分析 先上效果&#xff1a; 在Windows系统里有一个很棒的细节效果&#xff0c;元素的渐变高亮边框是可以感知鼠标的&#xff0c;边框的高亮部分会跟随鼠标的移动而移动。 这种效果也是比较常见的&#xff0c;但是实现起来还是需要一点时间和思路的。 首先&#xff0…

C/C++控制台贪吃蛇游戏的实现

&#x1f680;欢迎互三&#x1f449;&#xff1a;程序猿方梓燚 &#x1f48e;&#x1f48e; &#x1f680;关注博主&#xff0c;后期持续更新系列文章 &#x1f680;如果有错误感谢请大家批评指出&#xff0c;及时修改 &#x1f680;感谢大家点赞&#x1f44d;收藏⭐评论✍ 一、…

.NET_web前端框架_layui_栅格布局

基础概念 layui:用于简化前端编写的框架。响应式布局&#xff08;Responsive Layout&#xff09;:一种网页设计方法&#xff0c;使网页能够根据不同设备的屏幕尺寸和分辨率自动调整其内容和布局。栅格布局&#xff08;Grid Layout&#xff09;:一种网页设计布局方法&#xff0c…